Skip to content

James Williams

Far West 2024 Photo Drop

Part of the Far West 2024 feature.

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.
MakeFUJIFILM
Camera Model NameX-T10
Lens ModelXC16-50mmF3.5-5.6 OIS II
Exposure Time1/100
F Number5.6
ISO800
Focal Length34.0 mm
GPS Position49.330840 N, 123.044260 W ⤴︎
Image Size4896x3264
File Size17 MB
View full resolution ⤴︎

Washington

Lucia the Ducati Scrambler packed with luggage outside a store.
MakeApple
Camera Model NameiPhone 14 Pro
Lens ModeliPhone 14 Pro back dual wide camera 6.86mm f/1.78
Exposure Time1/1321
F Number1.8
ISO80
Focal Length6.9 mm
GPS Position48.221200 N, 122.688111 W ⤴︎
GPS Altitude5.4 m Above Sea Level
Image Size4032x3024
File Size9.9 MB
View full resolution ⤴︎
Waves crashing over the Tide Pools at Salt Creek Recreation Area in Washington.
MakeFUJIFILM
Camera Model NameX-T10
Lens ModelXC16-50mmF3.5-5.6 OIS II
Exposure Time1/2000
F Number3.5
ISO800
Focal Length16.0 mm
GPS Position48.166660 N, 123.703430 W ⤴︎
Image Size4768x3178
File Size16 MB
View full resolution ⤴︎
View east along the coast at Salt Creek Recreation Area in Washington.
MakeFUJIFILM
Camera Model NameX-T10
Lens ModelXC16-50mmF3.5-5.6 OIS II
Exposure Time1/4000
F Number3.8
ISO800
Focal Length20.1 mm
GPS Position48.166660 N, 123.703430 W ⤴︎
Image Size4788x3192
File Size12 MB
View full resolution ⤴︎
Sunset looking northwest from Salt Creek Recreation Area in Washington.
MakeFUJIFILM
Camera Model NameX-T10
Lens ModelXC16-50mmF3.5-5.6 OIS II
Exposure Time1/1900
F Number3.5
ISO400
Focal Length16.0 mm
GPS Position48.166660 N, 123.703430 W ⤴︎
Image Size4896x3264
File Size13 MB
View full resolution ⤴︎
Waking up with coffee on a Primus camp stove.
MakeApple
Camera Model NameiPhone 14 Pro
Lens ModeliPhone 14 Pro back dual wide camera 6.86mm f/1.78
Exposure Time1/100
F Number1.8
ISO125
Focal Length6.9 mm
GPS Position48.166542 N, 123.703850 W ⤴︎
GPS Altitude15.7 m Above Sea Level
Image Size3593x2694
File Size6.8 MB
View full resolution ⤴︎

Oregon

The Oregon Coast as captured from Heceta Head Lighthouse.
MakeApple
Camera Model NameiPhone 14 Pro
Lens ModeliPhone 14 Pro back triple camera 6.86mm f/1.78
Exposure Time1/5263
F Number1.8
ISO80
Focal Length6.9 mm
GPS Position44.137314 N, 124.128258 W ⤴︎
GPS Altitude49.2 m Above Sea Level
Image Size4032x3024
File Size9.8 MB
View full resolution ⤴︎

California

Looking north along the coast from Mattole Beach.
MakeFUJIFILM
Camera Model NameX-T10
Lens ModelXC16-50mmF3.5-5.6 OIS II
Exposure Time1/640
F Number5.6
ISO200
Focal Length50.0 mm
GPS Position40.290384 N, 124.355493 W ⤴︎
Image Size4896x3264
File Size14 MB
View full resolution ⤴︎
Looking north along the coast from Mattole Beach.
MakeFUJIFILM
Camera Model NameX-T10
Lens ModelXC16-50mmF3.5-5.6 OIS II
Exposure Time1/4000
F Number5.6
ISO800
Focal Length26.9 mm
GPS Position40.290384 N, 124.355493 W ⤴︎
Image Size4896x3264
File Size15 MB
View full resolution ⤴︎
Looking inland (east) along the coast from Mattole Beach.
MakeFUJIFILM
Camera Model NameX-T10
Lens ModelXC16-50mmF3.5-5.6 OIS II
Exposure Time1/60
F Number20.0
ISO200
Focal Length16.0 mm
GPS Position40.290384 N, 124.355493 W ⤴︎
Image Size4896x3264
File Size13 MB
View full resolution ⤴︎
Looking inland (southeast) along the coast from Mattole Beach at a distant barn on the hill.
MakeFUJIFILM
Camera Model NameX-T10
Lens ModelXC16-50mmF3.5-5.6 OIS II
Exposure Time1/75
F Number20.0
ISO400
Focal Length41.8 mm
GPS Position40.290384 N, 124.355493 W ⤴︎
Image Size4896x3264
File Size14 MB
View full resolution ⤴︎
Lucia and my tent set up in the campground.
MakeApple
Camera Model NameiPhone 14 Pro
Lens ModeliPhone 14 Pro back triple camera 9mm f/2.8
Exposure Time1/815
F Number2.8
ISO32
Focal Length9.0 mm
GPS Position40.290389 N, 124.355506 W ⤴︎
GPS Altitude8.3 m Below Sea Level
Image Size4032x3024
File Size11 MB
View full resolution ⤴︎
Looking northwest at a Mattole sunset along the beach.
MakeApple
Camera Model NameiPhone 14 Pro
Lens ModeliPhone 14 Pro back triple camera 6.86mm f/1.78
Exposure Time1/450
F Number1.8
ISO80
Focal Length6.9 mm
GPS Position40.291050 N, 124.356531 W ⤴︎
GPS Altitude3.1 m Below Sea Level
Image Size8064x6048
File Size31 MB
View full resolution ⤴︎
The Golden Gate bridge on a misty day.
MakeFUJIFILM
Camera Model NameX-T10
Lens ModelXC16-50mmF3.5-5.6 OIS II
Exposure Time1/1100
F Number3.5
ISO200
Focal Length16.0 mm
GPS Position37.828846 N, 122.485929 W ⤴︎
Image Size4896x3264
File Size9.7 MB
View full resolution ⤴︎
The California coastline facing south.
MakeFUJIFILM
Camera Model NameX-T10
Lens ModelXC16-50mmF3.5-5.6 OIS II
Exposure Time1/4000
F Number6.4
ISO800
Focal Length41.8 mm
GPS Position37.183721 N, 122.384005 W ⤴︎
Image Size4896x3264
File Size15 MB
View full resolution ⤴︎
Looking north along the Sonoma County coast at sunset from Pismo Beach, CA.
MakeFUJIFILM
Camera Model NameX-T10
Lens ModelXC16-50mmF3.5-5.6 OIS II
Exposure Time1/180
F Number5.6
ISO400
Focal Length50.0 mm
GPS Position35.139228 N, 120.643266 W ⤴︎
Image Size4828x3216
File Size11 MB
View full resolution ⤴︎
The view of Palm Springs from San Jacinto State Park.
MakeFUJIFILM
Camera Model NameX-T10
Lens ModelXC16-50mmF3.5-5.6 OIS II
Exposure Time1/2200
F Number4.2
ISO200
Focal Length23.2 mm
GPS Position33.810600 N, 116.640097 W ⤴︎
Image Size4603x3069
File Size13 MB
View full resolution ⤴︎
Greenery in San Jacinto State Park.
MakeFUJIFILM
Camera Model NameX-T10
Lens ModelXC16-50mmF3.5-5.6 OIS II
Exposure Time1/300
F Number6.4
ISO400
Focal Length16.0 mm
GPS Position33.810600 N, 116.640097 W ⤴︎
Image Size4896x3264
File Size19 MB
View full resolution ⤴︎
Oasis palm trees in Indian Canyon.
MakeApple
Camera Model NameiPhone 14 Pro
Lens ModeliPhone 14 Pro back triple camera 2.22mm f/2.2
Exposure Time1/818
F Number2.2
ISO40
Focal Length2.2 mm
GPS Position33.761692 N, 116.551217 W ⤴︎
GPS Altitude270.5 m Above Sea Level
Image Size4032x3024
File Size16 MB
View full resolution ⤴︎
Oasis palm trees in Indian Canyon.
MakeApple
Camera Model NameiPhone 14 Pro
Lens ModeliPhone 14 Pro back triple camera 2.22mm f/2.2
Exposure Time1/396
F Number2.2
ISO40
Focal Length2.2 mm
GPS Position33.761742 N, 116.551278 W ⤴︎
GPS Altitude274.6 m Above Sea Level
Image Size4032x3024
File Size16 MB
View full resolution ⤴︎
Oasis palm trees in Indian Canyon.
MakeApple
Camera Model NameiPhone 14 Pro
Lens ModeliPhone 14 Pro back triple camera 6.86mm f/1.78
Exposure Time1/7937
F Number1.8
ISO100
Focal Length6.9 mm
GPS Position33.762906 N, 116.554397 W ⤴︎
GPS Altitude303 m Above Sea Level
Image Size8064x6048
File Size55 MB
View full resolution ⤴︎
The utterly desolate 29 Palms Highway.
MakeFUJIFILM
Camera Model NameX-T10
Lens ModelXC16-50mmF3.5-5.6 OIS II
Exposure Time1/400
F Number13.0
ISO200
Focal Length16.0 mm
GPS Position34.047365 N, 115.223077 W ⤴︎
Image Size4896x3264
File Size13 MB
View full resolution ⤴︎
A shoe tree in Rice, CA.
MakeApple
Camera Model NameiPhone 14 Pro
Lens ModeliPhone 14 Pro back triple camera 6.86mm f/1.78
Exposure Time1/11628
F Number1.8
ISO100
Focal Length6.9 mm
GPS Position34.083897 N, 114.850647 W ⤴︎
GPS Altitude279.1 m Above Sea Level
Image Size8064x6048
File Size45 MB
View full resolution ⤴︎

Arizona

The Grand Canyon facing east.
MakeFUJIFILM
Camera Model NameX-T10
Lens ModelXC16-50mmF3.5-5.6 OIS II
Exposure Time1/2500
F Number3.5
ISO400
Focal Length16.0 mm
GPS Position36.065832 N, 112.117234 W ⤴︎
Image Size4842x3228
File Size13 MB
View full resolution ⤴︎
The Grand Canyon facing east.
MakeFUJIFILM
Camera Model NameX-T10
Lens ModelXC16-50mmF3.5-5.6 OIS II
Exposure Time1/80
F Number18.0
ISO200
Focal Length50.0 mm
GPS Position36.065832 N, 112.117234 W ⤴︎
Image Size4896x3264
File Size15 MB
View full resolution ⤴︎
The Grand Canyon facing east.
MakeFUJIFILM
Camera Model NameX-T10
Lens ModelXC16-50mmF3.5-5.6 OIS II
Exposure Time1/60
F Number16.0
ISO640
Focal Length16.0 mm
GPS Position36.065832 N, 112.117234 W ⤴︎
Image Size4896x3264
File Size15 MB
View full resolution ⤴︎
A Taco Bell in northeast Arizona.
MakeFUJIFILM
Camera Model NameX-T10
Lens ModelXC16-50mmF3.5-5.6 OIS II
Exposure Time1/1900
F Number4.7
ISO200
Focal Length31.0 mm
GPS Position36.707640 N, 110.250785 W ⤴︎
GPS Altitude0 m Above Sea Level
Image Size4810x3206
File Size11 MB
View full resolution ⤴︎

Colorado

View from the Durango-Silverton Narrow-Guage Steam Train.
MakeFUJIFILM
Camera Model NameX-T10
Lens ModelXC16-50mmF3.5-5.6 OIS II
Exposure Time1/420
F Number6.4
ISO400
Focal Length16.0 mm
GPS Position37.533489 N, 107.777522 W ⤴︎
Image Size4896x3264
File Size18 MB
View full resolution ⤴︎
A random highway in Colorado.
MakeFUJIFILM
Camera Model NameX-T10
Lens ModelXC16-50mmF3.5-5.6 OIS II
Exposure Time1/1250
F Number5.6
ISO400
Focal Length16.0 mm
GPS Position39.595413 N, 108.811276 W ⤴︎
Image Size4896x3264
File Size14 MB
View full resolution ⤴︎
Lucia parked aside a highway.
MakeFUJIFILM
Camera Model NameX-T10
Lens ModelXC16-50mmF3.5-5.6 OIS II
Exposure Time1/2200
F Number5.6
ISO400
Focal Length16.0 mm
GPS Position39.595413 N, 108.811276 W ⤴︎
Image Size4896x3264
File Size14 MB
View full resolution ⤴︎

Utah

Flaming Gorge Reservoir facing west from the Utah/Wyoming border.
MakeFUJIFILM
Camera Model NameX-T10
Lens ModelXC16-50mmF3.5-5.6 OIS II
Exposure Time1/220
F Number13.0
ISO200
Focal Length16.0 mm
GPS Position40.966451 N, 109.467022 W ⤴︎
Image Size4896x3264
File Size16 MB
View full resolution ⤴︎

Idaho

A classic post office in Leodore, Idaho.
MakeFUJIFILM
Camera Model NameX-T10
Lens ModelXC16-50mmF3.5-5.6 OIS II
Exposure Time1/160
F Number20.0
ISO400
Focal Length22.2 mm
GPS Position44.680603 N, 113.357277 W ⤴︎
Image Size4868x3244
File Size12 MB
View full resolution ⤴︎
A river and hillside in east Idaho.
MakeFUJIFILM
Camera Model NameX-T10
Lens ModelXC16-50mmF3.5-5.6 OIS II
Exposure Time1/2000
F Number5.6
ISO1250
Focal Length16.0 mm
GPS Position45.405074 N, 113.994626 W ⤴︎
Image Size4896x3264
File Size18 MB
View full resolution ⤴︎
The Lodge in Idaho.
MakeApple
Camera Model NameiPhone 14 Pro
Lens ModeliPhone 14 Pro back triple camera 6.86mm f/1.78
Exposure Time1/1433
F Number1.8
ISO80
Focal Length6.9 mm
GPS Position45.405297 N, 113.993819 W ⤴︎
GPS Altitude1100.2 m Above Sea Level
Image Size4006x3004
File Size12 MB
View full resolution ⤴︎

Note: All images were resized to a maximum of 4032 px wide after the metadata was processed. Image Sizes indicated above reflect the original image size prior to resizing.

P.S. I'm not active on social media. If you liked this, add this page to your RSS reader or subscribe via email and I'll send you a quick note when I post something new.


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.

Behold, lots of shit on a rugh.
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 ModeliPhone 14 Pro back triple camera 6.86mm f/1.78
ISO80
Exposure Time1/121
Image Size4032x3024
GPS Position21.018317 N, 101.253494 W
GPS Altitude2058.7 m Above Sea Level
GPS Img Direction159.2975464
Create Date2023: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 ModeliPhone 14 Pro back triple camera 6.86mm f/1.78
ISO80
Exposure Time1/7576
Image Size4032x3024
GPS Position21.016833 N, 101.254242 W
GPS Altitude2024 m Above Sea Level
GPS Img Direction116.5262318
Create Date2023:01:03 12:41:27
View full resolution ⤴︎
Volkswagen Beetle at sunset in Guanajuato City
Lens ModeliPhone 14 Pro back triple camera 6.86mm f/1.78
ISO80
Exposure Time1/1779
Image Size4032x3024
GPS Position21.019817 N, 101.250581 W
GPS Altitude2076.3 m Above Sea Level
GPS Img Direction260.5706482
Create Date2023:01:03 18:07:53
View full resolution ⤴︎
Guanajuato skyline facing northeast
Lens ModeliPhone 14 Pro back triple camera 6.86mm f/1.78
ISO80
Exposure Time1/1241
Image Size4032x3024
GPS Position21.014539 N, 101.254303 W
GPS Altitude2085.6 m Above Sea Level
GPS Img Direction40.99349974
Create Date2023:01:04 17:57:19
View full resolution ⤴︎
Subterranean intersection in Guanajuato
Lens ModeliPhone 14 Pro back triple camera 6.86mm f/1.78
ISO80
Exposure Time1/604
Image Size4032x3024
GPS Position21.016881 N, 101.256767 W
GPS Altitude2014.6 m Above Sea Level
GPS Img Direction104.9418297
Create Date2023:01:05 11:05:21
View full resolution ⤴︎

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.