WWDC 2023 Reaction

I watched the WWDC 2023 keynote, and here’s what I think as compared to my wishlist.

The new 15″ MacBook Air looks great, but it’s not for me. My main requirement is weight, and this is a half pound heavier. If I wanted to go up in size and weight, I’d consider the Pros. I skipped the M2 Air, and so I’ll just wait for the M3 and see how I feel about my M1 when that comes out. Right now, it seems fine.

There didn’t seem to be any more anti-theft help in iOS. I do appreciate the improvements to auto-correct.

I never even installed macOS Ventura. There’s nothing in Sonoma I care about, but I will probably install Ventura soon and consider upgrading in the Winter. My macOS upgrades are dictated by Xcode requirements. Surprisingly it hasn’t forced me to upgrade this year.

They said that tvOS would be better at knowing which audio device you want to be connected to, which would be great. As I mentioned in the wishlist, this is shockingly bad right now considering that literally every piece of hardware I use with my TV comes from Apple. If this works, it will be the only thing I unequivocally got from my wishlist.

Both Apple and I seem to agree that watchOS doesn’t need any more work. Not sure how the new design language affects Sprint-o-Mat—I’ll have to see as I use it. My favorite new feature is putting a waypoint on a hiking map for the last place you had cell coverage—I have needed that.

Ok, the headset.

I was expecting goggles, but (even though I think it was heavily implied in the rumors), I really thought they would be see-through with a projection. Instead, they are displays that show how cameras see the outside world, and external displays that show your eyes. I had discounted this rumor because it sounded insane, but it actually looks pretty good.

The problem is that the failure mode for the Vision Pro is blindness. Even when it’s working, it looks like it would randomly obstruct vision. Apps are completely opaque rectangles from what I could see. I didn’t see any demo of an application annotating reality. 3D objects could be placed in your scene, and I assume that apps will be able to pass through the camera feed, but that’s for games, not as an always-on feature.

This makes it impossible to use as a fitness device. I would not feel safe running with these on (and just forget about biking). I had hopes that I could make Sprint-o-Mat into a racing simulator (with pace runners on the track with you), but that feels unsafe to me. Maybe for track use only.

Also, my ideas for AR Apps that make the world into a playable game are not going to work with this device, and I really think it will not be used to navigate the real world. This is a stay-at-home entertainment device. It’s a very good one, but I was hoping for something that would be ok to use in real life.

If it stays at home, it does help alleviate the problem of always on cameras being creepy. They did address some of the issue by not letting 3rd party apps get this always-on feed. They also don’t let 3rd party apps get the eye-tracking data, which is also great.

The price being higher than the rumor was a surprise. I would love to try one, but it’s hard to justify $3499 for basically an awesome 1-person TV. For me, the giant workspace, immersive video conferencing, and cinema experience are very compelling. I don’t play games, but I bet there are going to be fitness games that I would enjoy (like a rowing simulator). I would only buy one if I think I’d develop an app for it.

Don’t Let Content Dictate Size in Diagram Elements

A couple of days ago, I wrote about the visual variables in graphic design as applied to diagramming. I showed this UML diagram:

One thing to think about in diagrams is how the size of an element is determined. In many cases, a shape’s size is dictated by its content, which can mislead the viewer on the relative importance of boxes.

I created this diagram for a talk I gave on unit testing, which is why it includes the unit testing library classes. In the talk, the most important class was BowlingGameTest, so it’s ok that the class is the largest one.

But, that was not intentional. BowlingGameTest is the biggest box because it has the most methods.

In the real system, BowlingGame is a much more important class. If this diagram was meant to give an overview of the system, you would want to make sure that the BowlingGame box was the most prominent. If your tool didn’t let you set size independent of content, then it would be better to leave out test methods so that the test class box was smaller.

Write While True Episode 20: Extemporaneous Writing

When I was 13, my mom got me an electric typewriter for Christmas. She was a secretary, and she taught me how to touch type, and she wanted me to have something to practice on. But unfortunately, when I opened it up, it didn’t work.

Transcript

How to Use Visual Variables to Emphasize Elements in a Diagram

In graphic design, there’s the concept of visual variables. For each element of a design, you can set its: Position, Size, Orientation, Hue, Value / Brightness, Texture / Pattern, and Shape.

By varying these variables between elements, you impart information. For example:

  1. Elements of the same color should be related in some way.
  2. Elements of different colors, but the same hue, might have a more broad relation.
  3. Elements that are close together should have a relationship related to location. Ones that are further apart should be further in that location.

You can learn more about this in these two books:

These variables also apply to diagramming. Maybe even more so because the entire point of a diagram is to impart information, where in a graphic design piece, like a poster, you have other considerations.

For example, in this C4 Context Diagram

  • Blue hues are for things that are internal to the system
  • Gray hues are for external elements
  • Dark values are users, lighter values are for software
  • Figure shapes are used to indicate users

In this UML Class diagram:

  • Hue is being used to indicate library elements (yellow) vs. classes in our system (cyan)
  • Lighter colored boxes are tests and the darker one is a class in the product

So, if you want to make an element more prominent, you could use a subset of the variables to do that:

  1. Use position to set it in the center with other elements around it
  2. Use size to make it bigger and other elements smaller
  3. Use rotation (sparingly) to make an element stand out as compared to others
  4. Use a different hue for the most important element
  5. Set its brightness at the extreme (darkest or lightest)
  6. Give it a distinctive pattern
  7. Give it a distinctive shape

In standardized diagrams or in editors that impose a layout algorithm, you might have limited control of all of the variables, but since there are so many options, there is usually something you can do.

WWDC 2023 Wishlist

WWDC23 is next week, so I put together a wishlist. I last did this in 2021, where I broke it down to watchOS, iOS, and developer tools. Whenever I write these wishlists, they are very centered on the work I am doing in the moment and what I need to help me. This year, I am doing less Apple device development, but I use the devices a lot and here are the things I am thinking about.

Headset

There are a lot of rumors that Apple will release an AR/VR headset. It seems like it will cost about $3,000, have an external battery pack, and come with a new framework.

This rumor has been around a while. For the Fall 2021 Apple event (when we really thought a headset would be coming), I wrote:

So, the main thing I’d hope for is something in AR. I’ve written about how I think AR could make apps more like games, and I do think that there’s space for a workout AR device. I would love to extend Sprint-o-Mat to make it feel like you’re in a race against the pace-runner. It would also be a good addition to Fitness+, which could extend to outdoor activities.

So, while I do have development ideas for an AR headset and would love to try one while running, it’s not worth $3,000 for me. If it’s a gaming device, I am not interested.

If the headset could somehow help me in my work (make me a more productive software engineer), then I would be more interested. GitHub Copilot seems to do a good enough job just in VSCode’s interface, but I could imagine being immersed in a VR world with even more heads up information. It would be interesting if there is some kind of meeting space VR, but since I mostly work alone, it would not be worth it to me.

I continue to be worried about headsets that have cameras. I think that it’s inherently creepy out in the real world and dangerous if camera access is extended to apps. I wrote about some ideas for Socially acceptable cameras in AR that I hope are in this headset if they are meant to be worn in public.

New Mac Hardware

If they release new hardware, I am in the market for a new MacBook Air. I love mine, but it’s an M1, so it only has 16GB. I wouldn’t mind expanding on that. I am holding out for a better camera. This seems impossible in the razor thin lid of the MacBook Air. I would be ok with some kind of camera array and a notch, if that’s what it took.

watchOS

My watch needs are driven by my app, Sprint-o-Mat. Aside from the AR features I mentioned above, I am pretty happy with where it is right now and don’t think there’s anything more I need in watchOS for it.

iOS/iPadOS

I hope that Apple adds more safeguards against device theft. One thing they could do is autolock the device if it moves out of connection with the watch. And they obviously need to do something about the fact that the device password gives too much access to iCloud and the Apple ID.

As for a system-wide feature, the biggest thing I miss on iOS is a clipboard manager. Even if they just kept a clipboard history and exposed an API, so that apps could fill the gap, I would be satisfied.

tvOS

I have an Apple TV, HomePods, and my wife and I both have AirPods (all made by Apple). But for some reason, the Apple TV insists on being connected to the TV audio by default. There seems to be no way to get to stay on the HomePods.

Keep Track of Your Good Work

This advice is mostly for people starting out in their careers in software engineering.

On your first day at a new job, start a document called “Promotion Packet”. If you are working for a company with published level descriptions, put in the job description of the the next level and include the judgement criteria in your employer’s words.

Find the company’s annual goals, OKRs, KPIs, etc, and ask how they trickle down to your department (and ultimately you). Write this down in your promotion packet as well.

Then, as you are working, look out for opportunities that align with that judgement criteria and the goals.

Finally, critically, keep track of all of those accomplishments with links. Make a digital footprint. For a programmer, that might be:

  1. Code
  2. PR comments
  3. Documents (specifications)
  4. Times where you are mentoring
  5. Participation in decision making

You are specifically looking for places where you are driving outcomes that the company leadership thinks is important and makes the case that you are operating at the next level. In your promotion packet document, you would want to write a two-sentence summary of the accomplishment and then a link to the proof.

I wrote about the general requirements of higher engineering levels in How Senior Software Developers Think. In short, it’s ever expanding scope and leverage.

If a performance review comes up before your next chance at a promotion, then you can use the information in this packet for that.

May 2023 Blog Roundup

I started writing much more frequently this month. I happened to be on vacation for two weeks of it, which gave me a lot of time for writing.

The main thing that got me going was wanting to start up my podcast again. I released four episodes in May.

I also updated my podcast workflow, which makes it a lot easier to do, and I think will make them better.

In Blog Posts, Randomness, and Optionality, I talked about my most popular blog post, and how it had more hits than the rest of my site combined (by far), mostly driven by search. That post hosts my UML Cheatsheet and is from 2006. I made the post following a talk I gave at a local meetup to try to get a job.

I am trying to write more about diagramming generally (to build on a past success). First I wrote that For Diagramming, Favor in-Document Editing and then I wrote that you should use C4 Context Diagrams in GitHub READMEs, and to help make these, I wrote The System Boundary is Defined by the External Pieces.

I’ve been interested in developer productivity metrics, so when I read about DevEx, I was interested, but I wrote a critique in Making Sausage and Delivering Sausage. But, then I wrote about the CRAP metric in Use Your First Commit to Fix CRAP and realized that both CRAP and DevEx are Metrics that Resist Gaming. CRAP always makes me think of refactoring, so in the middle of that I wrote about the First Rule of Refactoring Club.

June has four weekends, so I am expecting to make four podcasts. I also want to spend the bulk of my time thinking about diagramming, so I expect a lot of posts about that.

Two Color Journaling

I journal in black and red. Almost everything is black because I reserve red for anything on theme or particularly important to me. By “on theme”, I mean consistent with my yearly theme, which is to Make Art with Friends.

This has advantages in review and while journalling the day.

I am using a Recurring Journal this year, which means that when I journal I am seeing a past day on a different part of the page. If that past day was particularly red, I can try to match it. I can also easily see the red ink as a flip around. At the end of the year, when I review the journal, it will be easy to pick out the important parts.

During the day, I can see how much red ink I have or have not used and try to see if I can get something in to make the day more red.

Not every day needs to have some red on it, but sometimes I have a free moment, and since I have a low bar for making art, I can easily do it.

Morning Pages Make Me Feel Like ChatGPT

In the first episode of my podcast I said that I do morning pages to train myself to write on demand, and then I followed that up in Episode 3 where I explained that I use the momentum from morning pages to write a first draft of something.

While doing my morning pages last week I thought about how doing them is kind of like how ChatGPT generates text. It’s just statistically picking the next word based on all the words so far in the prompt and what it has already generated.

I am also doing something like that In my morning pages. I am writing writing writing and I use the words so far to guide my next ones.

My mind strays as I write and a phrase might trigger a new thread, which I follow for a bit and then follow another and another. ChatGPT’s results are a lot more coherent than my morning pages. It has an uncanny ability to stay on topic because it is considering all of the text, and I don’t.

First drafts are different. When I switch to writing a first draft, I do consider the entire text. I’m not as fast, because I am constantly looking at where I am so far. I also start with a a prompt in the form of a simple message that I hope to convey, which I use as the working title.

I know I could get a first draft faster from ChatGPT, but it would not be as good (I think), or at least not specific to me. More importantly, I would not have improved as a writer.

[NOTE: While writing a draft of this post, I thought of a way to make my morning pages more directed and made a podcast about it]

Write While True Episode 19: Prompt Your Morning Pages

If you are just coming to this podcast on this episode, I have to tell you that I talk about Morning Pages a lot. It was the subject of Episode 1. Listen to that for the full description of what they are or read the book The Artist’s Way by Julia Cameron [amazon affiliate link], which is where I was introduced to the idea.

The main thing to know is that I start each morning by writing three pages of long hand writing in an automatic stream of consciousness style. I never show them to anyone and they aren’t meant to be published. The point is to train my brain to generate text on demand.

If you read the entire thing, I would have a couple of sentences in a row here and there that make some sense, but overall, it’s not well-structured in any way. My pages tend to stray from topic to topic because I’m not considering the entire text.

This is the breakthrough I had today.

Transcript