Thoughts on Engineering, Photography, and Design.

Hey, I'm Ryan Heath. I design & develop things for a living and play with cameras for fun. This is where I share my thoughts on all of that — and probably more — along the way.

How to continue making kerosene lamps on the eve of electricity

I don’t think I fully believed in AI building software until fooling around with ChatGPT. Maybe it won’t affect software development like it feels like it might, but I don’t think it can be ignored any longer.

I like to imagine that all of us in software development, as it looks today, are busy making beautiful kerosene lamps in all shapes and sizes. We’re improving the burn efficiency. We’re finding ever clearer forms of glass to let the light through. We’re tinkering with a formula that’s been around for a long time. But as we do, Edison and Tesla are busy inventing electricity in the other room.

Setting Ownership in Rails

There’s a common pattern in a lot of applications to track who did what. Who created this post? Who was the last person to update it? Maybe it’s for accountability, maybe it’s because your client is nosy.

There are gems for this, but it’s such a simple thing, that extra dependency isn’t really worth it. So let’s take a look at a pretty simple way to achieve this in Rails 7 using a concern:

 1module Ownership
 2  extend ActiveSupport::Concern
 3
 4  included do
 5    before_validation :set_ownership
 6
 7    scope :created_by, ->(user_id) {
 8      where(creator_id: user_id)
 9    }
10    scope :updated_by, ->(user_id) {
11      where(updater_id: user_id)
12    }
13
14    belongs_to :creator, class_name: 'User',
15      foreign_key: 'creator_id', optional: true
16    belongs_to :updater, class_name: 'User',
17      foreign_key: 'updater_id'
18
19    validates :creator_id, :updater_id,
20      presence: true
21  end
22
23  private
24
25  def set_ownership
26    current_user = Current.user
27
28    if new_record?
29      self.creator_id = current_user.id
30      self.updater_id = current_user.id
31    else
32      self.updater_id = current_user.id
33    end
34  end
35end

Now, for any model that has creator_id and updater_id columns, you just have to include the Ownership module:

 1class Post < ApplicationRecord
 2  include Ownership
 3
 4  # ...
 5end
 6
 7>> @post = Post.find(1)
 8>> @post.creator
 9# => #<User id: 10 ... >
10>> @post.updater
11# => #<User id: 20 ... >

And whenever a Post is created, the creator is automagically set; similarly, whenever any Post is updated, the updater is automagically set. This, of course, assumes your application has user sessions, since you obviously need to know who’s logged in doing the creating and updating.

Cinebloom Diffusion Filters by Moment

I’ve had a cinebloom diffusion filter (10%) on my X100V for about a year now. If you’re not sure what a diffusion filter does, Moment’s site says it best:

The CineBloom Diffusion Filter takes the edge off your digital sensor. It not only catches and blooms light, but softens hard edges and has a smoothing effect on skin tones, making wrinkles less noticeable. Escape the clinical, ultra-sharp look of digital with this specialty glass.

While I’m someone who thrives on sharp images, for the 10% filter at least, I haven’t noticed a sacrifice in sharpness. Here’s a sample with (right) and without (left) this filter:

Comparison

It’s subtle, but it’s there.

This filter pairs really well with the output of the X100V, straight out of camera. Here’s another photo looking straight into the sun while my dog, Penny, is racing back and forth between my wife and I.

Penny

Again, the X100 series already produces stunning photos… but if you’re itching to mix it up a little bit, a cinebloom filter might be just the thing.

Compositions Using ViewCatcher

The ViewCatcher is a tiny little tool that is really useful for determining compositions when out in the field. It’s a plastic “card” that slides open to represent the view your camera would see. Here’s what it looks like:

The ViewCatcher

This thing may seem silly at first. But if you’re a photographer who walks around searching for compositions, I’m sure you’ve done one of the following two things:

  1. Stop to set up your tripod and mount your camera, only to find yourself continuing to move all over the area with your tripod fully extended searching for the best composition.
  2. You keep your camera out in your hand instead of your bag, repeatedly holding it to your eye to see if there’s a photograph to be made.

Both of those approaches are fine. But they drain battery, take time, expose your gear more, and can be annoying to deal with. With this little card, you can pull it out of your pocket as needed and focus your eye on a potential scene.

The ViewCatcher Example

If you’ve seen an old film director make a square with his hands and close one eye to look through it, this is that very concept. By filtering out the noise you can make better compositional decisions.

There are multiple popular aspect ratios supported (it has little marks indicating how far to slide it open):

  • 8x10
  • 8x12
  • 9x12
  • 11x14
  • 12x16

It’s quite handy!

Putting the Kibosh on UI vs UX

This is something I’ve argued at length throughout my career, and the last paragraph sums my feelings up nicely:

Users win when we prioritize building exceptional experiences that look great and function great; that solve real problems with finesse, grace, and delight. The more we fracture all this, the more we fall short of exceptional.

Glass: An Incredible Photo App

Glass is a stunning application built for photographers. As soon as I found it, I knew it was what I’d been looking for. There are only a couple of brand new, subscription-based services that I’ve immediately signed up with, but Glass was one of them. Zero hesitation, zero regrets.

And as someone who’s into product development (if you care about that sort of thing), I can confirm for you that it has a brilliant design with an even better UX. It’s a pleasure to use and is currently my favorite app. Oh, and it’s pretty great in a browser, too.

Aside from it being a fantastic application on its own merit, the people behind it seem just as fantastic. I really love their creativity, ideas, blog posts, approach to feedback, and even their Twitter account — I’m happy to support them.

Since Instagram is no longer a good place for photographers these days (as it’s all about video, stories, and “the algorithm”), it’s a wonderful time to try something new. There are lots of alternatives out there, but for me, the clear winner is Glass, hands down.

Highly recommended.

File Organization for Photographers

When you do a thing that produces a ton of files, requiring some level of organization and backup, you need a plan. For me, it’s photography. I’ve been through many variations of file storage, but I think I’ve cracked it. When I got serious about photography, trying to find out what fellow photographers did wasn’t as easy as you might think, so I’m writing this post for the Google index, in case you’re also wondering.

Conventions

Before getting into the details, here are the conventions that I use. To start, I keep everyting in a Photography folder and utilize two top-level folders inside of that:

  • Captures — This is where all photos land off the SD card (deselects) before culling.
  • Photos — This is where all keeper photos (selects) are moved to for eventual post-processing.

I’m also assuming that you shoot in RAW and plan to post-process your photos in some fashion. The base file structure for both Captures and Photos looks like this:

 1Captures
 2  [YEAR]
 3    [MONTH].[DAY]
 4      [CAMERA]
 5
 6Photos
 7  [YEAR]
 8    [MONTH].[DAY]
 9      [CAMERA]
  • The [YEAR] is in four-digit format, and the [MONTH].[DAY] should always be in two-digit format (so 01.08 for January 8th, instead of 1.8).
  • The [CAMERA] is optional, but if you shoot with multiple cameras, or suspect you might at some point, I recommend getting in this habit. Putting the [CAMERA] folder inside of the [MONTH].[DAY] folder ensures that you can continue to browse photos by date (independent of the camera that made them).

Here’s an real example taken from my MacBook:

Photo Organization

Personal or Professional?

There are differing levels of “serious” here. If it’s a hobby, you need organization and some type of passive backup (optional). If it’s a career, and you have clients, you need organization and some type of aggressive backup (required).

I’ll break down some ideas for both.

Personal Workflow

STEP 1: Create the necessary [MONTH].[DAY] folders in the Captures and Photos directories.

STEP 2: Under each of the [MONTH].[DAY] folders, create a sub-folder for the camera that made the photos.

STEP 3: Insert your SD card and copy all of the files to the Captures folder, ensuring that they’re organized by date and camera per the first two steps above.

STEP 4: Culling! This means going through all of your captured photos and choosing the selects that you want to post-process. For this, I use Photo Mechanic. It’s the fastest media browser for large RAW files I’ve ever used. I’m sure there are others, but that’s a good one.

From here, I go through the photos and flag the ones I want to keep with a 1 Star rating. I mapped a keyboard shortcut to the number 1 key, which helps speed things up. Also, the z key zooms in/out which helps you verify focus.

STEP 5: Once you’re finished culling, you need to move the selects to the Photos directory, following the same date and camera sub-folder organization applied to the Captures folder.

I do this inside of Photo Mechanic. Once I have all of my selects flagged with a 1 Star rating, I filter the list to hide 0 star photos which leaves me with all of the photos I want to post-process. From here, I select all and drag them to their proper home in the Photos directory.

STEP 6: Importing! I use Capture One Pro as my post-processing app of choice. I spent years in Lightroom Classic, and while it’s a great app, it doesn’t process X-Trans (Fujifilm) RAW files as good as Capture One.

This part may vary, depending on which application you use, but the idea here is to import all of the selects from the Photos folder. Remember, you never import from the Captures folder. Oh, and for Capture One users: I prefer the “Add to Catalog” option so that it keeps the file system and my organization intact.

STEP 7: Exporting! I no longer export my edits unless I’m doing something with them (printing, making a book, sharing on social media, etc).

That said, if you like or need to export, I recommend creating an Exports folder inside of your [MONTH].[DAY] folder. For exports, I don’t think the extra [CAMERA] organization is necessary. You could even take things a step further importing the exports into Apple Photos so you’d have backed up copies in iCloud.

Speaking of backups…

Yes! Backups.

As mentioned above, photography is just a hobby for me so I have a relaxed solution to backups. Given that, I’ll highlight two things:

  • I do all of this file organization on my MacBook’s native SSD drive. When the drive starts filling up, I will offload several entire [YEAR] folders onto external SSD drives, freeing up my MacBook’s drive storage.
  • I’ve been a customer of Backblaze for many years, and I rely on it. I use a CalDigit hub that connects all of my external SSDs through a single thunderbolt cable, and I include those as part of my backups in the Backblaze config.

This isn’t a fool-proof system by any means, but it satisfies my personal tolerance for risk of data loss.

Professional Workflow

I’m not a professional photographer, but I can anticipate how I might do things a little differently if I were. For that advice, I’ll inject what-would-be additional steps into the “Personal Workflow”.

PREREQUISITES: A couple of things I’d recommend first and foremost:

  • I would shoot with a camera that had dual card slots, and I would dedicate one slot as file backup.
  • I would store files on external SSD drives instead of your computer’s drive. I would have equivalent drives: one to work off of and one purely as a backup.

STEP 0: Connect both external SSD drives. “Drive A” will be the working drive, “Drive B” will be the backup.

STEP 1 (modified): Create the necessary [MONTH].[DAY] folders in the Captures and Photos directories, but add suffix descriptions to the folder to identify the type of shoot and the client.

Instead of 01.24 you might have 01.24_Wedding-Smith or 01.24_Fashion-Jones, for example.

STEP 3a: Once everything is copied off of the SD card and into the Captures folder on Drive A, do an additional copy of that entire folder onto Drive B. Now you instantly have 2 copies of the files.

BONUS: If you use Capture One for post-processing, I would consider using its session-based catalogs instead of keeping all photos in a single catalog. This has many advantages for client-based photography, but I’ll leave that research up to you.

Conclusion

It’s been over five years since I’ve used some other means of file organization — this approach has served me well. I’m certain there are ways I could improve, but for me and my needs, it strikes a good balance of cost, risk, and convenience.

Hopefully this was helpful, and good luck :-)

Trailer for a video series by Joel Meyerowitz

I’m only one episode deep into this series, but I can already tell it’ll be good. Ever since I picked up Cape Light (my first Joel Meyerowitz book) I was a fan.

Run Like The Wind

I’m infatuated with Iceland, but I mean… how can you not be. If you’re into photography, I’m sure you understand. Peter McKinnon recently took a trip there and put together a short video primarily from his drone footage, but it’s so well done.

Oh, and Matti Haapoja was on the trip, too, and has an equally impressive video (bringing back his “travel feels” series):

While I’m not into creating video content myself, I’m glad there are talented people who are.

Why Fujifilm?

My first digital camera was a Fujifilm A210 which had a whopping 3.2 MP. It was a little brick and I loved it. Eventually, I wanted to get “serious” about photography and have the ability to swap lenses. After some reasearch (plus budget limitations) I opted for a Nikon D80, and off I went.

Over the years the novelty of a shiny new DSLR wore off. It was clunky, an impossible daily carry, and caused me to stop making photos altogether. I only used it during events and missed out on everything else.

It was a sad time.

I’d been loosely following Fujifilm’s X-line for a bit, and with that old A210 in the back of my mind, I decided to take a real look at their current offerings.

In 2012-13 I pre-ordered the X100S. That camera single-handedly revived my love, desire, and attitude toward photography. Fujifilm had struck again. The size, fixed ~35mm lens, design/build quality, and image output made photography fun again. For the next five years, that’s the only camera I’d used to make photos.

Fast forward to today… My current set of bodies include:

  • X-T5: landscape
  • X-Pro3: family, portraits, and street
  • X100V: every day life, always with me

I’m all-in on Fujifilm and its X-system, let’s go over some reasons why.

APS-C vs Full-Frame

I’m going to get this out of the way… it’s always part of the argument. It’s a subjective choice to prioritize a full-frame sensor above other things, and I completely understand why one would. But speaking from experience, the X-Trans sensors are wildly good. They have great dynamic range, high-ISO performance, and plenty of resolution for most needs. Plus, the 1.5x crop factor has advantages, too (way more telephoto reach).

Full-frame sensors do out-perform APS-C in many ways, but you almost need 1:1 comparisons through pixel-peeping software to notice. I’m here to tell you that the delta is extremely small. I’ve been producing very sharp, high quality photos with Fujifilm cameras for years now.

Obviously, you don’t have to choose Fujifilm X, just be hesitant to blame APS-C as the reason.

Design

I struggle with a thing that functions great but has horrible form. I need both. Take Canon, for example; their cameras are SO ugly to me! I could never own one, even though I’m fully aware of how amazing the image output can be.

But Fujifilm? Wow. They definitely speak my language. To hold one of their cameras is both inspiring and motivating, specially the X100V and X-Pro3. These cameras will stay with me forever, purely on aesthetics. The only camera system I’ve seen who can top Fujifilm in both design, chosen materials, and build quality, is Leica.

Design matters, and Fujifilm continually nails it.

Film Simulations

I love the idea of film, with its limitations and uniqueness, but there’s no way I could deal with the post-processing of it all. Fujifilm, of course, has a long-standing history with film, and they’ve capitalized on that in the digital world through their film simulations.

In addition to their out-of-the-box simultations, you can easily create your own or adopt those created by others. Fuji X Weekly has some amazing recipes ready to go. If you’re interested in film, but don’t want the hassle of scanning and developing, shooting Fujifilm in JPEG mode with film simulations gives the film experience, digitally. It’s pretty fun, I must say. And their JPEGs out of camera are second-to-none.

One Sensor, Multiple Bodies

The way Fujifilm delivers its cameras to users is unlike other brands, and I love it. They really focus and prioritize the experience above all else.

When a new sensor comes out, that new sensor goes into all of the camera/body variations in the pipeline, so you’re never sacrificing on image quality. You just have to choose the ergonomics and design that speaks to you.

My X-T4, X-Pro3, and X100V all have the exact same X-Trans sensor, for example. Now, maybe the processor has more power on one camera versus the other (for example, not every camera can be built for sports). But in terms of quality, there’s no sacrifice. No matter the body, your images will be consistently incredible.

Firmware Updates

This may sound silly, but it’s actually a big deal. Fujifilm listens to its customers, and on top of that, regularly updates its firmware to bring new features to its cameras. Sometimes it’s for bugs or new hardware compatability, but quite often it’s for brand new features.

I haven’t seen many other brands take firmware that seriously, but Fujifilm releases useful firmware on a regular basis.

Lens Quality

Lastly, it’s probably worth mentioning the lens lineup. Without getting into the details, I’ve owned/used 20+ Fujinon lenses over the years and have yet to come across a bad one. They’re incredibly sharp and have a lot of character. There’s a lens for every use case, with more and more released on a yearly cadence (see the roadmap).

On top of that, many of the 3rd party lenses that are made for the X-system are stunning. My latest one is the Viltrox 13mm f1.4 and it’s one of the sharpest wide angle lenses I’ve ever used. The price? $429! I’m not suggesting to only buy 3rd party lenses, just that the X-system provides you with options you won’t find on other systems.

Conclusion

There’s magic in Fujifilm and I’m completely invested in the X-system. I really do love everything about it.

At the end of the day, though, cameras are just tools for creative output. The important thing is that you find a tool that you love to capture the moments you believe to be worthwhile. For me, that happens to be Fujifilm.

If you’ve made it this far and have specific questions, feel free to email me (ryan at rpheath dot com) and we can chat some more! Happy shooting!