Skip to content

James Williams

Far West 2024 Photo Drop

Part of the Far West 2024 series.

A few days before I departed, I purchased a used FUJIFILM X-T10 camera to try to learn some photography basics and document the trip. The slower pace this afforded as I occasionally stopped to compose a scene was worth it alone.

Here are a few of my favourite photos from my three-week motorcycle adventure through the American west.


British Columbia

A wooded urban park in North Vancouver, BC.

Make FUJIFILM
Camera Model Name X-T10
Lens Model XC16-50mmF3.5-5.6 OIS II
Exposure Time 1/100
F Number 5.6
ISO 800
Focal Length 34.0 mm
GPS Position 49.330840 N, 123.044260 W ⤴︎
Image Size 4896x3264
File Size 17 MB
View full resolution ⤴︎

Washington

Lucia the Ducati Scrambler packed with luggage outside a store.

Make Apple
Camera Model Name iPhone 14 Pro
Lens Model iPhone 14 Pro back dual wide camera 6.86mm f/1.78
Exposure Time 1/1321
F Number 1.8
ISO 80
Focal Length 6.9 mm
GPS Position 48.221200 N, 122.688111 W ⤴︎
GPS Altitude 5.4 m Above Sea Level
Image Size 4032x3024
File Size 9.9 MB
View full resolution ⤴︎

Waves crashing over the Tide Pools at Salt Creek Recreation Area in Washington.

Make FUJIFILM
Camera Model Name X-T10
Lens Model XC16-50mmF3.5-5.6 OIS II
Exposure Time 1/2000
F Number 3.5
ISO 800
Focal Length 16.0 mm
GPS Position 48.166660 N, 123.703430 W ⤴︎
Image Size 4768x3178
File Size 16 MB
View full resolution ⤴︎

View east along the coast at Salt Creek Recreation Area in Washington.

Make FUJIFILM
Camera Model Name X-T10
Lens Model XC16-50mmF3.5-5.6 OIS II
Exposure Time 1/4000
F Number 3.8
ISO 800
Focal Length 20.1 mm
GPS Position 48.166660 N, 123.703430 W ⤴︎
Image Size 4788x3192
File Size 12 MB
View full resolution ⤴︎

Sunset looking northwest from Salt Creek Recreation Area in Washington.

Make FUJIFILM
Camera Model Name X-T10
Lens Model XC16-50mmF3.5-5.6 OIS II
Exposure Time 1/1900
F Number 3.5
ISO 400
Focal Length 16.0 mm
GPS Position 48.166660 N, 123.703430 W ⤴︎
Image Size 4896x3264
File Size 13 MB
View full resolution ⤴︎

Waking up with coffee on a Primus camp stove.

Make Apple
Camera Model Name iPhone 14 Pro
Lens Model iPhone 14 Pro back dual wide camera 6.86mm f/1.78
Exposure Time 1/100
F Number 1.8
ISO 125
Focal Length 6.9 mm
GPS Position 48.166542 N, 123.703850 W ⤴︎
GPS Altitude 15.7 m Above Sea Level
Image Size 3593x2694
File Size 6.8 MB
View full resolution ⤴︎

Oregon

The Oregon Coast as captured from Heceta Head Lighthouse.

Make Apple
Camera Model Name iPhone 14 Pro
Lens Model iPhone 14 Pro back triple camera 6.86mm f/1.78
Exposure Time 1/5263
F Number 1.8
ISO 80
Focal Length 6.9 mm
GPS Position 44.137314 N, 124.128258 W ⤴︎
GPS Altitude 49.2 m Above Sea Level
Image Size 4032x3024
File Size 9.8 MB
View full resolution ⤴︎

California

Looking north along the coast from Mattole Beach.

Make FUJIFILM
Camera Model Name X-T10
Lens Model XC16-50mmF3.5-5.6 OIS II
Exposure Time 1/640
F Number 5.6
ISO 200
Focal Length 50.0 mm
GPS Position 40.290384 N, 124.355493 W ⤴︎
Image Size 4896x3264
File Size 14 MB
View full resolution ⤴︎

Looking north along the coast from Mattole Beach.

Make FUJIFILM
Camera Model Name X-T10
Lens Model XC16-50mmF3.5-5.6 OIS II
Exposure Time 1/4000
F Number 5.6
ISO 800
Focal Length 26.9 mm
GPS Position 40.290384 N, 124.355493 W ⤴︎
Image Size 4896x3264
File Size 15 MB
View full resolution ⤴︎

Looking inland (east) along the coast from Mattole Beach.

Make FUJIFILM
Camera Model Name X-T10
Lens Model XC16-50mmF3.5-5.6 OIS II
Exposure Time 1/60
F Number 20.0
ISO 200
Focal Length 16.0 mm
GPS Position 40.290384 N, 124.355493 W ⤴︎
Image Size 4896x3264
File Size 13 MB
View full resolution ⤴︎

Looking inland (southeast) along the coast from Mattole Beach at a distant barn on the hill.

Make FUJIFILM
Camera Model Name X-T10
Lens Model XC16-50mmF3.5-5.6 OIS II
Exposure Time 1/75
F Number 20.0
ISO 400
Focal Length 41.8 mm
GPS Position 40.290384 N, 124.355493 W ⤴︎
Image Size 4896x3264
File Size 14 MB
View full resolution ⤴︎

Lucia and my tent set up in the campground.

Make Apple
Camera Model Name iPhone 14 Pro
Lens Model iPhone 14 Pro back triple camera 9mm f/2.8
Exposure Time 1/815
F Number 2.8
ISO 32
Focal Length 9.0 mm
GPS Position 40.290389 N, 124.355506 W ⤴︎
GPS Altitude 8.3 m Below Sea Level
Image Size 4032x3024
File Size 11 MB
View full resolution ⤴︎

Looking northwest at a Mattole sunset along the beach.

Make Apple
Camera Model Name iPhone 14 Pro
Lens Model iPhone 14 Pro back triple camera 6.86mm f/1.78
Exposure Time 1/450
F Number 1.8
ISO 80
Focal Length 6.9 mm
GPS Position 40.291050 N, 124.356531 W ⤴︎
GPS Altitude 3.1 m Below Sea Level
Image Size 8064x6048
File Size 31 MB
View full resolution ⤴︎

The Golden Gate bridge on a misty day.

Make FUJIFILM
Camera Model Name X-T10
Lens Model XC16-50mmF3.5-5.6 OIS II
Exposure Time 1/1100
F Number 3.5
ISO 200
Focal Length 16.0 mm
GPS Position 37.828846 N, 122.485929 W ⤴︎
Image Size 4896x3264
File Size 9.7 MB
View full resolution ⤴︎

The California coastline facing south.

Make FUJIFILM
Camera Model Name X-T10
Lens Model XC16-50mmF3.5-5.6 OIS II
Exposure Time 1/4000
F Number 6.4
ISO 800
Focal Length 41.8 mm
GPS Position 37.183721 N, 122.384005 W ⤴︎
Image Size 4896x3264
File Size 15 MB
View full resolution ⤴︎

Looking north along the Sonoma County coast at sunset from Pismo Beach, CA.

Make FUJIFILM
Camera Model Name X-T10
Lens Model XC16-50mmF3.5-5.6 OIS II
Exposure Time 1/180
F Number 5.6
ISO 400
Focal Length 50.0 mm
GPS Position 35.139228 N, 120.643266 W ⤴︎
Image Size 4828x3216
File Size 11 MB
View full resolution ⤴︎

The view of Palm Springs from San Jacinto State Park.

Make FUJIFILM
Camera Model Name X-T10
Lens Model XC16-50mmF3.5-5.6 OIS II
Exposure Time 1/2200
F Number 4.2
ISO 200
Focal Length 23.2 mm
GPS Position 33.810600 N, 116.640097 W ⤴︎
Image Size 4603x3069
File Size 13 MB
View full resolution ⤴︎

Greenery in San Jacinto State Park.

Make FUJIFILM
Camera Model Name X-T10
Lens Model XC16-50mmF3.5-5.6 OIS II
Exposure Time 1/300
F Number 6.4
ISO 400
Focal Length 16.0 mm
GPS Position 33.810600 N, 116.640097 W ⤴︎
Image Size 4896x3264
File Size 19 MB
View full resolution ⤴︎

Oasis palm trees in Indian Canyon.

Make Apple
Camera Model Name iPhone 14 Pro
Lens Model iPhone 14 Pro back triple camera 2.22mm f/2.2
Exposure Time 1/818
F Number 2.2
ISO 40
Focal Length 2.2 mm
GPS Position 33.761692 N, 116.551217 W ⤴︎
GPS Altitude 270.5 m Above Sea Level
Image Size 4032x3024
File Size 16 MB
View full resolution ⤴︎

Oasis palm trees in Indian Canyon.

Make Apple
Camera Model Name iPhone 14 Pro
Lens Model iPhone 14 Pro back triple camera 2.22mm f/2.2
Exposure Time 1/396
F Number 2.2
ISO 40
Focal Length 2.2 mm
GPS Position 33.761742 N, 116.551278 W ⤴︎
GPS Altitude 274.6 m Above Sea Level
Image Size 4032x3024
File Size 16 MB
View full resolution ⤴︎

Oasis palm trees in Indian Canyon.

Make Apple
Camera Model Name iPhone 14 Pro
Lens Model iPhone 14 Pro back triple camera 6.86mm f/1.78
Exposure Time 1/7937
F Number 1.8
ISO 100
Focal Length 6.9 mm
GPS Position 33.762906 N, 116.554397 W ⤴︎
GPS Altitude 303 m Above Sea Level
Image Size 8064x6048
File Size 55 MB
View full resolution ⤴︎

The utterly desolate 29 Palms Highway.

Make FUJIFILM
Camera Model Name X-T10
Lens Model XC16-50mmF3.5-5.6 OIS II
Exposure Time 1/400
F Number 13.0
ISO 200
Focal Length 16.0 mm
GPS Position 34.047365 N, 115.223077 W ⤴︎
Image Size 4896x3264
File Size 13 MB
View full resolution ⤴︎

A shoe tree in Rice, CA.

Make Apple
Camera Model Name iPhone 14 Pro
Lens Model iPhone 14 Pro back triple camera 6.86mm f/1.78
Exposure Time 1/11628
F Number 1.8
ISO 100
Focal Length 6.9 mm
GPS Position 34.083897 N, 114.850647 W ⤴︎
GPS Altitude 279.1 m Above Sea Level
Image Size 8064x6048
File Size 45 MB
View full resolution ⤴︎

Arizona

The Grand Canyon facing east.

Make FUJIFILM
Camera Model Name X-T10
Lens Model XC16-50mmF3.5-5.6 OIS II
Exposure Time 1/2500
F Number 3.5
ISO 400
Focal Length 16.0 mm
GPS Position 36.065832 N, 112.117234 W ⤴︎
Image Size 4842x3228
File Size 13 MB
View full resolution ⤴︎

The Grand Canyon facing east.

Make FUJIFILM
Camera Model Name X-T10
Lens Model XC16-50mmF3.5-5.6 OIS II
Exposure Time 1/80
F Number 18.0
ISO 200
Focal Length 50.0 mm
GPS Position 36.065832 N, 112.117234 W ⤴︎
Image Size 4896x3264
File Size 15 MB
View full resolution ⤴︎

The Grand Canyon facing east.

Make FUJIFILM
Camera Model Name X-T10
Lens Model XC16-50mmF3.5-5.6 OIS II
Exposure Time 1/60
F Number 16.0
ISO 640
Focal Length 16.0 mm
GPS Position 36.065832 N, 112.117234 W ⤴︎
Image Size 4896x3264
File Size 15 MB
View full resolution ⤴︎

A Taco Bell in northeast Arizona.

Make FUJIFILM
Camera Model Name X-T10
Lens Model XC16-50mmF3.5-5.6 OIS II
Exposure Time 1/1900
F Number 4.7
ISO 200
Focal Length 31.0 mm
GPS Position 36.707640 N, 110.250785 W ⤴︎
GPS Altitude 0 m Above Sea Level
Image Size 4810x3206
File Size 11 MB
View full resolution ⤴︎

Colorado

View from the Durango-Silverton Narrow-Guage Steam Train.

Make FUJIFILM
Camera Model Name X-T10
Lens Model XC16-50mmF3.5-5.6 OIS II
Exposure Time 1/420
F Number 6.4
ISO 400
Focal Length 16.0 mm
GPS Position 37.533489 N, 107.777522 W ⤴︎
Image Size 4896x3264
File Size 18 MB
View full resolution ⤴︎

A random highway in Colorado.

Make FUJIFILM
Camera Model Name X-T10
Lens Model XC16-50mmF3.5-5.6 OIS II
Exposure Time 1/1250
F Number 5.6
ISO 400
Focal Length 16.0 mm
GPS Position 39.595413 N, 108.811276 W ⤴︎
Image Size 4896x3264
File Size 14 MB
View full resolution ⤴︎

Lucia parked aside a highway.

Make FUJIFILM
Camera Model Name X-T10
Lens Model XC16-50mmF3.5-5.6 OIS II
Exposure Time 1/2200
F Number 5.6
ISO 400
Focal Length 16.0 mm
GPS Position 39.595413 N, 108.811276 W ⤴︎
Image Size 4896x3264
File Size 14 MB
View full resolution ⤴︎

Utah

Flaming Gorge Reservoir facing west from the Utah/Wyoming border.

Make FUJIFILM
Camera Model Name X-T10
Lens Model XC16-50mmF3.5-5.6 OIS II
Exposure Time 1/220
F Number 13.0
ISO 200
Focal Length 16.0 mm
GPS Position 40.966451 N, 109.467022 W ⤴︎
Image Size 4896x3264
File Size 16 MB
View full resolution ⤴︎

Idaho

A classic post office in Leodore, Idaho.

Make FUJIFILM
Camera Model Name X-T10
Lens Model XC16-50mmF3.5-5.6 OIS II
Exposure Time 1/160
F Number 20.0
ISO 400
Focal Length 22.2 mm
GPS Position 44.680603 N, 113.357277 W ⤴︎
Image Size 4868x3244
File Size 12 MB
View full resolution ⤴︎

A river and hillside in east Idaho.

Make FUJIFILM
Camera Model Name X-T10
Lens Model XC16-50mmF3.5-5.6 OIS II
Exposure Time 1/2000
F Number 5.6
ISO 1250
Focal Length 16.0 mm
GPS Position 45.405074 N, 113.994626 W ⤴︎
Image Size 4896x3264
File Size 18 MB
View full resolution ⤴︎

The Lodge in Idaho.

Make Apple
Camera Model Name iPhone 14 Pro
Lens Model iPhone 14 Pro back triple camera 6.86mm f/1.78
Exposure Time 1/1433
F Number 1.8
ISO 80
Focal Length 6.9 mm
GPS Position 45.405297 N, 113.993819 W ⤴︎
GPS Altitude 1100.2 m Above Sea Level
Image Size 4006x3004
File Size 12 MB
View full resolution ⤴︎

Packing Lucia for a four-season motorcycle camping trip

Part of the Far West 2024 series.

The objective today is to cut as much useless cruft from the packing list as possible. I need to outfit myself to ride through very hot temperatures in Southern California and Arizona, and very cold temperatures in Wyoming and Montana. It’s only May and even in the more temperate Pacific Northwest, overnight temperatures dip quite low. I also have a few days scheduled with friends in Palm Springs, so I’ll need enough kit to look presentable in regular society (to the extent that that’s possible for me).

I need some basic tools to fix a puncture or adjust the suspension. This is America, so a CAA/AMA membership should negate the need for spare parts, but I would want to bring spare shift/clutch/brake levers, oil filters and other model-specific items if venturing further.

Lots of shit on a rug.

Behold, lots of shit on a rug.

Let’s break it down by bag. I have five pieces of soft luggage that strap to the bike and provide about 84 litres of capacity in total. I can also strap bulkier items like my tent on top of the luggage.

Kriega OS-12 x 2 saddlebags

These are positioned lower and more central on the bike, so I’ll put the heaviest and least fragile items in here like tools and camping hardwear. These bags are also easier to access without unstrapping anything, so I put a few quick-access things here as well, just minding that if I hit the dirt, anything breakable in the side luggage will get a little smashy. Likewise, it’s not a good place for a first aid kit assuming if I fall and hurt myself, whatever is in the side luggage will be underneath a 450 lb. motorcycle and difficult to access.

Right-hand bag

  • Primus burner
  • Fuel canister
  • Stainless pot/plate set
  • Small skillet
  • Ceramic mug
  • Collapsible pour-over coffee filter
  • Salt, pepper, olive oil, ground coffee
  • Fork, spoon, pocket knife
  • Tongs (you laugh, but you’ve never known the pain of dropping a nice cut of steak in a fire pit)
  • Camp soap and scrubber
  • Small garbage bag
  • Roll of toilet paper
  • Shower flip-flops
  • Tent footprint/light tarp
  • Kindle

Left-hand bag

  • Basic tool roll
  • Multi allen key tool (Ducati likes allen keys)
  • Stop & Go T-Handle Tubeless tire repair kit
  • Stop & Go mini air compressor
  • Tire pressure gauge with deflator button
  • Chain lube (every thousand kilometres gotta keep that thing saucy)
  • Gorilla tape
  • Multi-tool pocket knife
  • Headlamp
  • Flashlight
  • Rope
  • 6 ft. webbing strap/tie-down
  • Giant Loop Armadillo spare fuel bag, 2 gallon (Lucia has a small tank, especially for an 803 cc twin)
  • Ducati user manual
  • Summer riding gloves
  • Toque
  • Cap

Kriega US-30

Large tail bag. I’ll put my clothing in here as well as my laptop, and I’ll try to avoid heavy items to keep the weight centered over the footpegs as much as possible.

  • Jeans
  • Shorts
  • Buttoned shirt
  • Lightweight hoodie
  • T-shirts x 4
  • Thermal base layer, top and bottom
  • Socks and underwear x 5
  • Swim trunks
  • Quick-drying travel towel
  • Laptop and peripherals

Kriega US-20

Medium-sized tank bag. I’ll put soft camping items and miscellaneous bulky items in here. More weight over the tank helps keeps the bike stable under load.

  • Medical kit
  • Lightweight down sleeping bag
  • Inflatable sleeping mat
  • Inflatable pillow
  • Down quilt (for such a range in temperatures, it’s easier and more versatile to do a light sleeping bag and layer on a quilt when needed)
  • Arc’Teryx low-top hiking boots/shoes
  • iPad

Honestly, shoes are the toughest thing to reason about. They are both bulky and heavy, and for three weeks of varied activity, including dinners and nights out, I would love to bring a pair of sneakers that I can dress up more. I just don’t have the space, but I recognize I may need to keep an eye out for a pair of shoes along the way that collapse to a small size but can look sharp in a pinch.

Kriega US-10

Small tail bag that can attach to the larger ones. The US-30 in this case. I leave some room in this one for groceries.

  • Water bottle
  • Light toiletry bag
  • Patagonia Nano-Puff jacket

Attached items

Strapped directly to the tail using Rok Straps over the US-30 are the tent, hatchet, and light folding chair. Opulent, I know.

I am going to bring my Hippo Hands hand guards on this trip given the likelihood of rain and certainty of cool temperatures in the mountains. They’ll be awkward in the hotter climates, but they’re too large to pack away so I think it’s easiest to just fix them on at the outset and leave ’em.

I’ll keep my FUJIFILM X-T10 camera over my shoulder generally, and a GoPro Hero 11 mounted on a rigid mount above the wind screen facing forward. I also have a Hero 7 on a flexible clamp mount I can use for B-roll. Rounding it out on the handlebars is a Garmin Zumo XT Navigator that frankly deserves an entire blog post of its own to unravel the dark wisdom of the Garmin software engineer.

I'm in love with Guanajuato

Guanajuato is my favourite city in Mexico. The centro historico is built into a valley, and many of the roads are tunneled through the mountains that surround it. The city itself has been built and rebuilt upon its former self, with a subterranean level comprised of the haciendas that once lined the Guanajatu River.

Guanajuato City facing south from Centro

Lens Model iPhone 14 Pro back triple camera 6.86mm f/1.78
ISO 80
Exposure Time 1/121
Image Size 4032x3024
GPS Position 21.018317 N, 101.253494 W
GPS Altitude 2058.7 m Above Sea Level
GPS Img Direction 159.2975464
Create Date 2023:01:03 18:22:08
View full resolution ⤴︎

My first thought when I got here was, why? Why tunnel through three kilometers of mountain to build a town here? The answer is silver. The area around Guanajuato accounted for more than two-thirds of the world’s silver production leading into the 19th century. The primary mine—La Valenciana—is still operational.

Guanajuato was also the site of the first battle of the Mexican War of Independence. You can still see the bullet holes in the Alhóndiga de Granaditas (grain exchange building next to the central mercado).

Guanajuato is about 4 to 5 hours by bus from Mexico City and well worth the trip. It’s also a very reasonable day trip (and beautiful drive) from San Miguele de Allende.

Guanajuato City church in main plaza

Lens Model iPhone 14 Pro back triple camera 6.86mm f/1.78
ISO 80
Exposure Time 1/7576
Image Size 4032x3024
GPS Position 21.016833 N, 101.254242 W
GPS Altitude 2024 m Above Sea Level
GPS Img Direction 116.5262318
Create Date 2023:01:03 12:41:27
View full resolution ⤴︎

Volkswagen Beetle at sunset in Guanajuato City

Lens Model iPhone 14 Pro back triple camera 6.86mm f/1.78
ISO 80
Exposure Time 1/1779
Image Size 4032x3024
GPS Position 21.019817 N, 101.250581 W
GPS Altitude 2076.3 m Above Sea Level
GPS Img Direction 260.5706482
Create Date 2023:01:03 18:07:53
View full resolution ⤴︎

Guanajuato skyline facing northeast

Lens Model iPhone 14 Pro back triple camera 6.86mm f/1.78
ISO 80
Exposure Time 1/1241
Image Size 4032x3024
GPS Position 21.014539 N, 101.254303 W
GPS Altitude 2085.6 m Above Sea Level
GPS Img Direction 40.99349974
Create Date 2023:01:04 17:57:19
View full resolution ⤴︎

Subterranean intersection in Guanajuato

Lens Model iPhone 14 Pro back triple camera 6.86mm f/1.78
ISO 80
Exposure Time 1/604
Image Size 4032x3024
GPS Position 21.016881 N, 101.256767 W
GPS Altitude 2014.6 m Above Sea Level
GPS Img Direction 104.9418297
Create Date 2023:01:05 11:05:21
View full resolution ⤴︎

Full resolution photos are available below the fold.

Note: I’ve edited this post. It was first posted on January 4, 2023 with only the leading image. When I first posted the picture, it was in the early days of ChatGPT and I was of course excited to try to generate some text with it. I did so with a short description of Guanajuato City as a caption, and with the benefit of hindsight I’m no longer comfortable polluting the internet with content I didn’t write myself. All of the photos beyond the first were published on March 23, 2024 and the text is my own.

Pulling a Smartsheet table into Microsoft Excel using Power Query

Well if you thought my first post in eight months would be exotic, go ahead and smash that back button.

I use this technique when we have one-off assignments at work where I need a quick and dirty web-based data store that several people can collaborate on, and that can be easily queried in Excel without any intermediate infrastructure or processing. This would be quite trivial if not for Smartsheet’s intractible API format.

Assuming you have a Smartsheet grid you want to mirror in Excel and that can be refreshed on the fly, you’ll need the sheet’s ID and an API bearer token for a user with viewer permissions.

In Excel, open Power Query and create a new query using the advanced editor. Make sure to replace $SHEET_ID and $BEARER_TOKEN. The query will bring in both your data and column headers.

let
    Source = Json.Document(
        Web.Contents("https://api.smartsheet.com/2.0/sheets/$SHEET_ID", [
            Headers=[
                #"Content-Type"="application/json",
                Authorization="Bearer $BEARER_TOKEN"
            ]
        ])
    ),

    // Process rows
    RowsData = Source[rows],
    RowsTable = Table.FromList(RowsData, Splitter.SplitByNothing()),
    ExpandedRows = Table.ExpandRecordColumn(
        RowsTable,
        "Column1",
        {"id", "rowNumber", "expanded", "createdAt", "modifiedAt", "cells", "siblingId"},
        {"ID", "RowNumber", "Expanded", "CreatedAt", "ModifiedAt", "Cells", "SiblingId"}
    ),
    ExpandCells = Table.ExpandListColumn(ExpandedRows, "Cells"),
    ExpandedCellsDetails = Table.ExpandRecordColumn(
        ExpandCells,
        "Cells",
        {"columnId", "value", "displayValue"},
        {"ColumnID", "CellValue", "CellDisplayValue"}
    ),
    RemovedCellsMetaColumns = Table.RemoveColumns(
        ExpandedCellsDetails,
        {"ID", "Expanded", "CreatedAt", "ModifiedAt", "CellDisplayValue", "SiblingId"}
    ),
    PivotedCellsByColumnId = Table.Pivot(
        Table.TransformColumnTypes(RemovedCellsMetaColumns, {{"ColumnID", type text}}),
        List.Distinct(Table.TransformColumnTypes(RemovedCellsMetaColumns, {{"ColumnID", type text}})[ColumnID]),
        "ColumnID",
        "CellValue"
    ),
    CleanRowData = Table.RemoveColumns(PivotedCellsByColumnId, {"RowNumber"}),

    // Process columns
    ColumnsData = Source[columns],
    ColumnsTable = Table.FromList(ColumnsData, Splitter.SplitByNothing()),
    ExpandedColumns = Table.ExpandRecordColumn(
        ColumnsTable,
        "Column1",
        {"id", "title"},
        {"ColumnID", "ColumnTitle"}
    ),
    ColumnTitlesMapped = Table.Pivot(
        Table.TransformColumnTypes(ExpandedColumns, {{"ColumnID", type text}}),
        List.Distinct(Table.TransformColumnTypes(ExpandedColumns, {{"ColumnID", type text}})[ColumnID]),
        "ColumnID",
        "ColumnTitle"
    ),

    // Add headers
    CombinedDataTable = Table.Combine({ColumnTitlesMapped, CleanRowData}),
    FinalData = Table.PromoteHeaders(CombinedDataTable)

in
    FinalData

How to checkout and edit a pull request locally

Let’s say you have a dependabot pull request and Charlie Marsh has added a new check to Ruff that causes your lint check to fail. You can fix the lint error and push the changes back to the pull request branch!

First, checkout the pull request locally:

# In this case, I'm updating ruff to v0.0.278
git fetch origin dependabot/pip/ruff-0.0.278
git switch --track origin/dependabot/pip/ruff-0.0.278

We’ve now checked out the PR branch and set it to track the remote. We can use this pattern to keep tabs on long-running PRs, or as in this case, simply push an additional patch before merging. If you’d like a more friendly local branch name, you can append the :my-branch-name to the end of the git fetch call, and then call git switch my-branch-name to check it out; just keep in mind that this won’t set the local branch to track the remote.

In my case, this ruff release does not provide any new rule categories and my lints still pass, however I’d like to update the ruff version in my .pre-commit-config.yaml file so that it’s consistent with my requirements.txt. I’ll make that change, commit and push back to the remote.

git add .pre-commit-config.yaml
git commit -m "Update pre-commit config."
git push

At this point, your checks should fire again and you can merge using your preferred merge method into your trunk. Check out real pull request to see how this looks server side.