Itinerary for the Ultimate Miami & Caribbean Cruise Vacay

4-night Royal Caribbean cruise aboard the Freedom of the Seas (Deck Plan) plus a few days in Miami before and after the cruise

February 2024

SUNMONTUEWEDTHUFRISAT
10
11121314151617

Packing List

Travel and Health Docs

  • Passport / Green Card
  • ID Card
  • COVID Card
  • Royal Caribbean SetSail Pass

Saturday, February 10, 2024

9:30 AM – 10:00 AMDrive to SF Int’l Airport (SFO)
  • Driving Time: 30 min
10:00 AMCheck in
  • Flight: AA 2045
  • Airline: American
  • Confirmation #: IICJZE
  • Seats: 36E, 36F
  1. Scan boarding pass at the kiosk
  2. Attach Express Bag Tags to bags
  3. Tag bags to Bag Drop
11:00 AMLunch at Airport

There’s no free food on the plane. Eat at the airport. Bring trail mix.

12:00 PMTake off
8:19 PMLand at Miami Int’l Airport (MIA)
  • American Airlines is in the north terminal (D)
8:45 PMGo to rental car center
  1. Use the 3rd-Level Skyride (moving walks) to access the MIA Mover station.
  2. Use the MIA Mover located on the 3rd level between the Dolphin and Flamingo garages to go to the MIA Rental Car Center.
9:00 PMPick up rental car
  • Company: Thrifty
  • Confirmation #: K7583417634
  • Reservation Website: expedia.com
  • Vehicle: Chevy Malibu
  • Total Cost For 2 Days: $96.46
  • Collision Damage Waiver: Extra (get at counter)
9:30 PMLate Dinner
  • Panda Express is nearby and is open till 1 AM.
  • Driving time: 6 min
10:30 PMDrive to Hotel & Check In
  • Regency Miami Airport by Sonesta
  • Driving time: 8 min
10:00 PMAttach Luggage Tags to Luggage

Sunday, February 11, 2024

8:00 AM – 9:00 AMBreakfast at IHOP
  • 285 NW 42nd Ave, Miami, FL 33126
  • Open 24 hours
  • Drive Time: 5 min
Steak Omelette with Pancakes
9:15 AM – 10:15 AMDrive to Everglades Holiday Park
  • Driving time: 40 mins
10:30 AM – 12:00 PMEverglades Airboat Tour
  • Official website
  • Open: 9:00 a.m. – 4:00 p.m.
  • $39
  • AIRBOAT TOUR: 60 mins
  • LIVE ALLIGATOR SHOW: 20 mins
  • Airboat tour tickets are first-come, first-served – no reservations necessary! Tours leave the dock every 20-minutes or less.
12:00 PM – 1:00 PMDrive to Bayside Marketplace
1:00 PM – 2:00 PMWalk to Rolly’s Bistro for Lunch
  • Menu
  • Hours: 10 AM – 10 PM
  • Order:
    • Beef panini
    • Pina Colada
2:00 PM – 4:30 PMWalk to Big Bus Tours and Go on Red Tour
  • Website
  • Hours: 9 am – 4 pm
  • Cheaper to buy online
  • Frequency: Every 30 minutes
  • Duration: 2 hrs 10 min
  • Cost: $86
4:30 PM – 5:30 PMDrive Along Miami Beach
6:00 PMSunset
6:00 PMDrive to Miami Beach Parking Garage
6:00 PM – 8:00 PMWalk Around Espanola Way and Lincoln Shopping District

Española Way

Website

Española Way is a historic street in Miami Beach, Florida. It’s located between 14th and 15th Streets, between Washington Avenue and Pennsylvania Avenue. It’s a pedestrian-only street with shops, galleries, restaurants, and bars. 

Lincoln Road Shopping District

Website

Miami Beach’s Lincoln Road is one of the most unique shopping districts in the world,  full of stunning architecture, world-class culture and destination retail stores spanning 8 blocks.

8:00 PMHave Dinner at The Lincoln Eatery or CGK Miami
  • The Lincoln Eatery
  • Hours: 8 AM – 10 PM
  • CGK (Crazy Good Kitchen) Miami
  • Hours: 11 AM to 10 PM
  • Menu
9:00 PMDrive Back to Hotel
  • Driving Time: 22 min

Monday, February 12, 2024

8:15 AMBreakfast at IHOP
  • Drive Time: 5 min
Spicy Poblano Eggs Benedict
9:15 AMCheck Out of Hotel

9:30 AMDrive Back to Bayside Parking
  • Driving time: 15 mins
10:30 AMWalk to and Check in at Thriller Miami Speedboat Sightseeing Tour
  • 4-minute walk from parking garage
  • Website
  • Open: 11 am – sunset
  • Tours are every 1.5 hours on weekdays
  • Duration: 45 minutes
  • Cost: $45
  • MUST CHECK IN 30 MINUTES PRIOR TO DEPARTURE
  • BRING HAT NECK LANYARD
  • SIT AT BACK OF BOAT
11:00 AM – 11:45 AMTake Thriller Miami Speedboat Sightseeing Tour
12:00 PMRide Skyviews Miami Observation Wheel
  • Walking time: 3 min
  • Website
  • Open: 12 – 10 pm
  • Duration: 12 min
  • Cost: $20
12:30 PMWalk Around Bayside Marketplace
12:30 PM – 1:00 PMWalk Around Bayside Marketplace
1:00 PM – 1:30 PMDrive to Return Rental Car
1:30 PM – 2:00 PMTake Uber to Cruise Terminal
2:30 PMCheck In For Cruise
  • Cruise Terminal A
  • Check-in time is between 2:30 and 3 PM
  • Must check in no later than 3 PM to board the cruise
3:30 PMBoard Cruise and Go to Stateroom (with Balcony)

Stateroom # 6236

4:30 PMCruise Departs to CocoCay, Bahamas
4:30 PMSailaway Spots

Go to the bow (front) of the ship where the helipad is.

There are 2 ways there:

  1. Go outside on deck 4, walk forward, climb up a set of stairs and continue walking forward until you reach the helicopter pad.
  2. Walk all the way forward on Deck 5, enter the Star Lounge, take an immediate right just past the DJ booth. There’s a set of unmarked doors to the helipad.  
5:00 PMExplore the Ship

Deck 2

  • Middle (Midship): Studio B Ice Rink
  • Rooms: Ocean-View Rooms, Interior Rooms

Deck 3

  • Front (Forward): Royal Theater
  • Middle (Midship): Studio B Ice Rink, Photo Studio, Art Gallery
  • Back (Aft): Main Dining Hall
  • Rooms: Ocean-View Rooms, Interior Rooms

Deck 4

  • Front (Forward): Royal Theater
  • Middle (Midship): Izumi Hibachi & Sushi, Schooner Bar, Casino Royale, Playmakers Sports Bar & Arcade, Boleros, Centrum
  • Back (Aft): Main Dining Hall

Deck 5

  • Front (Forward): Outdoor Deck
  • Middle (Midship): Star Lounge, Library Card Room, Sorrento’s, Bull& Bear Pub, Promenade Shops, Royal Promenade, Ben & Jerry’s Ice Cream, Cafe Promenade, Next Cruise, Shore Excursions, Guest Services, R Bar
  • Back (Aft): Main Dining Hall

Deck 6

  • Rooms: Suites, Balcony Rooms, Ocean-View Rooms, Promenade-View Rooms, Interior Rooms

Deck 7

  • Rooms: Suites, Balcony Rooms, Ocean-View Rooms, Promenade-View Rooms, Interior Rooms

Deck 8

  • Rooms: Suites, Balcony Rooms, Ocean-View Rooms, Promenade-View Rooms, Interior Rooms

Deck 9

  • Rooms: Suites, Balcony Rooms, Ocean-View Rooms, Interior Rooms

Deck 10

  • Rooms: Suites, Balcony Rooms, Ocean-View Rooms, Interior Rooms

Deck 11

  • Front (Forward): Fitness Center
  • Middle (Midship): Solarium, Whirlpool, The Lime & Coconut, Main Pool, Sports Pool, Splashaway Bay, El Loco Fresh, PADI, Chops Grille, Giovanni’s Italian Kitchen
  • Back (Aft): The Plaza Bar, Windjammer Cafe

Deck 12

  • Front (Forward): Spa
  • Middle (Midship): The Lime & Coconut, Running Track, Movie Screen
  • Back (Aft): Nursery, Adventure Ocean, Arcade, Johnny Rockets

Deck 13

  • Front (Forward): Freedom Dunes
  • Back (Aft): Rock Climbing Wall, Sports Court, The Perfect Storm Waterslides, Flowrider

Deck 14

  • Front (Forward): Lounges

Deck 15

5:45 PMDinner at Main Dining Hall [RESERVED]
  • Traditional Dining: 5:45 PM
  • My Time Dining: 7 – 9:30 PM
  • Bottom level = Deck 3
  • Middle level = Deck 4
  • Top level = Deck 5
  • Cruise Dining Options
  • Main Dining Room (Galileo, Isaac & Leonardo) at back of ship. Enter on deck 3.
  • Reservations are required. RSVP through the Royal Caribbean app or call extension 7000.
6:00 PMSunset
7:30 or 9:30 PMWatch a Show
  • Shows are nightly at 7:30 PM and 9:30 PM
  • Arrive 15 mins before the show
  • Royal Theater
  • Decks 3 and 4
10:30 PMPack for Next Day at Cococay
  • Dry bag
  • Snorkel mask
  • Inflatable lounges
  • Sunscreen
  • Cameras and equipment (selfie stick, etc)
  • SeaPass card
  • Cash: Tipping cabana attendants requires cash
  • Beach towels. You can get these from the ship. 
  • Sunglasses
  • Hats

Tuesday, February 13, 2024

6:42 AMSunrise in the Bahamas
7:00 AMArrive at Cococay
RRestroom
9:00 AMLLocker
9:15 – 9:30 AMTTram
10:30 – 11:15 AMZ1Zipline Start – Tower 1
Z2, Z3Zipline Middle – Towers 2 & 3
Z4Zipline Landing
11:30 AMF1Food – Chill Grill
F2Food – Snack Shack
F3Food – Skipper’s Grill
12:30 – 1:45 PMAJet Skis
2:30 PM – 2:45 PMBBalloon
3:00 – 4:00 PMO1Chill Island
O2Harbor Beach
O3Oasis Lagoon
SSnorkel Rental
7:30 AM – 8:30 AMBreakfast at Windjammer Buffet
  • Hours: 7:00 – 11:00 AM

9:00 AMPut stuff in a locker

There are free lockers to use around Perfect Day at CocoCay. Lockers are first come, first serve. Get a locker near the zipline starting area.

9:00 – 9:15 AMTake Tram Around Island
10:30 AM – 11:15 AMZipline
  • Appointment Time: 10:30 AM
  • Hours: 8:00 AM – 3:30 PM
  • Duration: 45 min
  • Cost: $50 pp
11:30 AM – 12:00 PMLunch

Have lunch at Chill Grill (or other places).

Captain Jack’s Bar ($)8:00 AM – 4:30 PM
Oasis Lagoon Bar ($)8:00 AM – 4:30 PM
South Beach Bar ($)8:00 AM – 4:30 PM
Coco Beach Club8:00 AM – 4:30 PM
Chill Grill11:30 AM – 3:00 PM
Skipper’s Grill 11:30 AM – 3:00 PM
Snack Shack Oasis11:00 AM – 3:30 PM
Snack Shack Water Park11:00 AM – 3:30 PM
South Beach Snack Shack11:00 AM – 3:30 PM
12:30 PM – 1:45 PMJet Ski Tour
  • Appointment Time: 12:30 PM
  • Hours: 9:00 AM – 2:00 PM
  • Cost: $65 driver, $25 passenger
  • Duration: 1 hr 15 min
2:30 PM – 2:45 PMHelium Balloon Ride
  • Appointment Time: 2:30 PM
  • Hours: 8:30 AM – 3:30 PM
  • Duration: 10 min
  • Cost: $43 pp
3:00 PM – 4:00 PMBeaches, Pools & Exploration
4:00 PMReturn to Ship
5:00 PMDepart Cococay to Nassau
5:45 PMDinner at Main Dining Hall [RESERVED]
6:00 PMSunset
7:30 or 9:30 PMWatch a Show
  • Shows are nightly at 7:30 PM and 9:30 PM
  • Arrive 15 mins before the show
  • Royal Theater
  • Decks 3 and 4
10:30 PMWatch a Movie Outside

Wednesday, February 14, 2024

8:00 AMBreakfast on Balcony (Room Service)
9:30 AM – 11:30 AMShip Tour
  • Appointment Time: 9:30 AM
  • Duration: 2 hours
  • Cost: $89
11:30 AM – 12:00 PMFitness
  • Hours: 6:00 AM – 9:00 PM
12:00 – 12:30 PMRelax
12:30 – 1:30 PMLunch at Windjammer Buffet
  • Hours:
    • 7:00 – 11:00 AM
    • 12:00 PM – 3:00 PM
    • 6:00 PM – 9:00 PM
1:30 PM – 3:30 PMWaterslides
  • Open: Noon to 6 PM
3:30 PM – 4:30 PMRock Climbing Wall
  • Open: 3:30 – 7:00 PM
  • Deck 13
5:45 PMDinner at Main Dining Hall [RESERVED]
6:00 PMSunset
7:30 or 9:30 PMWatch a Show
  • Shows are nightly at 7:30 PM and 9:30 PM
  • Arrive 15 mins before the show
  • Royal Theater
  • Decks 3 and 4

Dining on Board

Main Dining Room

  • No extra cost
  • Deck 3, 4, 5
  • Ext 7000
  • Breakfast: 8 AM – 9:30 AM
  • Dinner: 7 PM – 9:30 PM

Windjammer Marketplace

  • No extra cost
  • Deck 11
  • Breakfast: 7 AM – 11 AM
  • Lunch: Noon – 3:30 PM
  • Dinner: 6 PM – 9 PM

Cafe Promenade Coffee Station

  • No extra cost
  • Deck 5
  • 24 hours

El Loco Fresh

  • No extra cost
  • Deck 11
  • 3 PM – 6 PM

Sorrento’s Pizza

  • Extra cost $
  • Deck 5
  • 1:30 PM – 3 AM

Cupcake Cupboard

  • No extra cost
  • Deck 11
  • 11 AM – 8 PM

Chef’s Table

  • RSVP required
  • Extra cost $$$$
  • Ext 7000
  • Deck 5
  • 6:30 PM

Chops Grille

  • RSVP required
  • Extra cost $$$
  • Ext 7000
  • Deck 11
  • 5:30 PM – 9:30 PM

Giovanni’s Italian Kitchen

  • RSVP required
  • Extra cost $$$
  • Ext 7000
  • Deck 11
  • 5:30 PM – 9:30 PM

Izumi Hibachi & Sushi

  • RSVP required
  • Extra cost $$
  • Ext 7000
  • Deck 4
  • 5:30 PM – 9:30 PM

Johnny Rockets

  • Extra cost $$
  • Deck 12
  • 2:00 PM – 10:30 PM

Ben & Jerry’s Ice Cream

  • Extra cost $
  • Deck 5
  • 2:00 PM – 11:00 PM

Cafe Promenade Coffee Station

  • No extra cost
  • Deck 5
  • 6:30 AM – 11:00 PM

Room Service

  • Extra cost
  • Ext 7000
  • Deck 5
  • 6:30 AM – 11:00 PM

Thursday, February 15, 2024

6:42 AMSunrise in the Bahamas
7:00 AM – 8:00 AMBreakfast at Windjammer Buffet
  • Hours: 7:00 – 11:00 AM
8:00 AMArrive at Nassau, Bahamas
9:00 AMTake Shuttle to Atlantis
  • Appointment time: 9:00 AM
  • Bring dry bag and camera accessories
9:30 AM – 1:30 PMPlay at Atlantis Waterpark
  • Atlantis Resort Map
  • Atlantis Aquaventure Map
  • Wristbands are required and can be obtained at any towel hut
  • Aquaventure is cashless. Pay by credit card.
  • Lockers are available and subject to availability
  • Towers are provided for day use
  • Complimentary life jackets are provided for day use
  • Wear sandals or water shoes because the pathways can get very hot
  • Shortest wait times for the water slides and the rapids river are when the rides open at 10 AM
  • The center of the action is the Mayan Temple Pool

Action Plan

  1. Get a locker
  2. Go on Mayan Temple water slides (bring short and 3.4″selfie stick)
  3. Go on Power Tower water slides (bring short and 3.4″selfie stick)
  4. Go on river rides (bring short and 3.4″selfie stick)
  5. Have lunch
  6. Go to pools (bring 3.4′ and 10′ selfie stick)
  7. Go to the beaches (bring 3.4′ and 10′ selfie stick)
  8. Take photos at vista points (bring dry bag)
  9. Explore the Royal Towers (bring dry bag)
  10. Visit the Dig

Mayan Temple Water Slides

Leap of Faith: a near 60-foot near-vertical drop propels you through a clear acrylic tunnel into a shark-filled lagoon [video]

Serpent Slide: travel 5-stories down in complete darkness, then emerge and float through an acrylic tunnel in a shark-filled lagoon [video]

Challenger Slide: race down twin high-speed slides with friends, then check your speeds on the time clocks at the bottom to see who won [video]

Jungle Slide: take a thrilling safari slide through the exotic jungle-scape and caves built right into the heart of the Mayan temple [video]

Power Tower Water Slides

The Abyss: Drop into complete darkness with twists and turns and end in an underground cave with alligator gar and tropical fish. [video]

The Surge: Brave a camel back drop into a cavern with quick downward twists and turns into white-water rapids. [video]

The Drop: Drop through darkness, then enjoy open-air twists and turns before splashing down into the Rapids River [video]

The Falls: This slide shoots you 58 feet to ground level, then propels you through a water roller coaster of twisting tubes. [video]

River Rides

The Rapids River: A mile-long river ride with extreme rapid, rolling waves, water escalators and surprises. [video]

Lazy River: A relaxing, scenic, quarter-mile loop guided by a gentle current. [video]

Pools

Royal Baths: This low key pool features two sunburst mosaics and soothing music with the iconic Royal Towers as a backdrop.

Mayan Temple Pool: One of the most popular pools at Atlantis, adjacent the slides of the Mayan Temple. A live DJ spins hot beats.

Baths Colonnade Pool: Large columns with hieroglyphs and rockwork structures adorn this free-form pool.

Grotto Pool: A zero-entry pool framed by two cascading waterfalls. Preferred seating with lockable safe and electronics charging station available for a fee.

River Pool: A relaxing zero-entry pool just steps away from Atlantis Beach and removed from the main activity of Aquaventure.

Blu Pool: This pool offers a cool vibe with music from the 80s, 90s, and today’s billboard hits.

Beaches

Atlantis Beach: An action-packed beach located closest to Beach, Coral and Royal Towers.

Cove Beach: This beach offers a protective cove, good for snorkeling and just soaking up the sun.

Paradise Beach: A tranquil stretch of sand, perfect for relaxing closest to the Reef.

Paradise Lagoon Beaches: Paradise Lagoon offer two beaches for snorkeling, paddle boats, and other water sports, in a protected environment – great for families.

Other

The Dig: Polished marine life & aquarium exhibits in a series of tunnels at the posh Atlantis resort.

2:00 PMTake Shuttle Back to Ship
2:30 PMExplore Downtown – Straw Market
3:00 PMExplore Downtown – Queen’s Staircase
4:00 PMGo Back to Ship
5:00 PMDepart Nassau Back to Miami
5:30 PMPack Bags

Cruise staff will pick up luggage at night. Keep a foldable overnight / duffle bag to store night clothes and toiletries.

5:45 PMDinner at Main Dining Hall [RESERVED]
6:00 PMSunset
7:30 or 9:30 PMWatch a Show
  • Studio B – Ice Rink
  • Deck 3

Friday, February 16, 2024

6:00 AMArrive in Miami
7:30 AMTake Uber From Cruise Terminal to Airport
  • Driving time: 20 min
8:00 AMPick Up Rental Car
CompanyThrifty
Confirmation #K7581590277
Reservation Websiteexpedia.com
SizeChevy Malibu
Total Price For 2 Days$62.08
Collision Damage Waiverextra
9:30 AM – 9:45 AMDrive to Frost Museum of Science
  • Driving Time: 15 min
10:00 AMBuy Planetarium Show Tickets
  • Must buy tickets on site
  • Website
  • Hours: 10:00 am – 6:00 pm
  • Cost: $30
10:20 AMWatch Planetarium Show
11:00 AMWatch Planetarium Show
  • Dynamic Earth
  • Duration: 24 min
  • Showtimes: 11:00 a.m. | 12:20 p.m. | 1:40 p.m. | 3:00 p.m. | 4:20 p.m. | 5:40 p.m.
11:30 AM – 11:45 AMDrive to Wynwood Walls
  • Driving time: 10 min
12:00 PM – 1:00 PMExplore Wynwood Walls
  • Website
  • Hours: 11 am – 7 pm
  • Cost: $12
1:00 PM – 1:15 PMDrive to Lock n Load Museum
  • Driving Time: 10 min
1:15 PM – 2:30 PMVisit Lock n Load Museum
  • Website
  • Hours: 12 – 6 pm
  • Cost: Museum: Free, Shooting Training: $175
2:30 PM – 2:45 PMDrive to Superblue Miami Immersive Art Experience
  • Driving Time: 5 min
2:45 PM – 3:45 PMVisit Superblue Miami Immersive Art Experience
  • Website
  • Hours: 11 am – 7 pm
  • Cost: $39
3:45 PM – 4:45 PMDrive to Hotel & Check In
  • Garden Hotel Miami International Airport
  • Driving time: 30 min
  • Check-in time: 3 PM
4:45 PM – 5:15 PMDrive to ARTECHOUSE Miami
  • Driving Time: 30 min
5:15 PM – 6:00 PMVisit ARTECHOUSE Miami
  • Website
  • Hours: 1 – 8 pm
  • Cost: ?
6:00 PMSunset
6:00 PM – 6:10 PMDrive to Museum Of Illusions
  • Driving Time: 10 min
6:10 PM – 7:00 PMVisit Museum Of Illusions
  • Website
  • Hours: 11 AM to 9 PM
  • Cost: $30
7:00 PM – 7:15 PMDrive to Fogo de Chão Brazilian Steakhouse
  • Driving Time: 10 min
7:30 PM – 8:30 PMDinner at Fogo de Chão Brazilian Steakhouse
  • Website
  • Hours: 12 PM – 10:30 PM
  • SEASONAL CUT
  • MASHED POTATOES
  • CARAMELIZED BANANAS

PICANHA – Prime part of the Top Sirloin

FILET MIGNON – Tenderloin

ALCATRA – Top Sirloin

FRALDINHA – Bottom Sirloin

BONE-IN BEEF ANCHO – Bone-in Ribeye

COSTELA – Beef Ribs

CORDEIRO – CLamb Picanha, ChopsZ

FRANGO – Chicken

WARM PÃO de QUEIJO – Cheese Bread

CRISPY POLENTA

9:00 PMRSVP Online for Segway Tour
  • Website
  • RSVP for 10 AM tour the following day
  • Tours are at 10 AM and 2 PM

Saturday, February 17, 2024

8:00 AM – 9:00 AMBreakfast at IHOP
9:00 AMCheck Out of Hotel
9:00 AM – 9:20 AMDrive to Bike n Roll Miami
  • 210 10th St, Miami Beach, FL 33139
  • Driving Time: 20 min
10:00 AM – 12:00 PMGo on Segway Tour
  • Website
  • RSVP
  • Hours: 9 AM – 6 PM
  • Duration: 2 hours
  • Cost: $75
12:00 PM – 12:15 PMDrive to Bayside Parking
  • Driving Time: 15 min
12:15 PM – 12:20 PMWalk to Millionaire’s Row Tour
  • Walking time: 5 min
1:00 PM – 2:30 PMGo on Millionaire’s Row Tour
  • Website
  • After purchase, you will receive a voucher via email.
  • You must EXCHANGE this voucher at least 45 minutes prior to scheduled departure time at one of our ticket booths at Bayside Marketplace (NOT in the line where you will board) for a physical boarding pass.
  • Duration: 90 min
  • Hours: 11 am – 6 pm
  • Cost: $30
  • Departure Times: 10:30AM, 11AM, 12PM, 1PM, 2PM, 3PM, 4PM, 5PM, 6PM
2:30 PM – 2:45 PMDrive to Bike n Roll Miami

Duration: 15 mins

2:45 PM – 4:30 PMRent e-bike and Ride Along Miami Beach
  • Website
  • Cost: $25 / hour, $85 / day
4:30 PM – 5:30 PMDrive to Airport Rental Car Center & Return Car
  • Driving Time: 30 min
6:30 PMDinner at Airport

There’s no free food on the plane. Eat at the airport. Bring trail mix. American Airlines is in the north terminal (concourse D, 2nd Level Departures).

8:11 PMFly Back to San Francisco
  • Flight: AA 2426
  • Airline: American Airlines
  • Confirmation #: IICJZE
  • Seats: 26E, 26F
11:51 PMLand at SFO

How to Customize a Hat with Appliques / Patches

While there are many services that let you buy a hat and customize it, you may not like the style, quality or fit of the hat. Also, you are limited in how you can customize it. In this post, I explain how I customized a hat I already own. Since I’m planning to go on a cruise, I wanted a hat that kinda looked like a captain’s hat. My preferred hat is a black cap that I get at a nearby mall.

I wanted to customize it with design elements from the captain hat shown below.

After much research, trial and error, I ended up with this:

Here’s how I made it.

Materials

  1. Scrambled Eggs, Embroidered, Iron on Patch (Metallic Gold)
  2. Gold Star Embroidered, Iron on Patch
  3. E6000 adhesive
  4. Gold buttons (similar to this)
  5. Sewing pins

Instructions

  1. Place the patches on the hat and secure using sewing pins.
  2. When you know where the patches should go, put sewing pins in hat at certain points along perimeter of patches to guide where the patches should go.
  3. Add glue to the back of the patches and place patches on hat.
  4. Insert sewing pins into hat through patches to secure patches in place. If necessary, clamp patches to hat using a clamp.
  5. Decide where to put the gold buttons.
  6. Drill hold in hat where gold buttons would go.
  7. Fasten gold buttons to hat via the holes you just created.

For the buttons, I actually took mine off of a cheap hat I had bought on Amazon. The buttons have 2 flat metal pins that can be folded to secure the buttons.

Best Caribbean Beaches & Travel Considerations

The Caribbean is a subregion of the Americas that includes the Caribbean Sea and its islands.

Best Beaches

If your idea of the best beach is like mine, which are beaches that have

  • shallow turquoise or clear water,
  • fine white sand,
  • no garbage, seaweed, rocks and corral

like this

then, looking at the Google satellite image above, it should be evident that one spot stands out: The Bahamas! Actually, if we zoom in on that area, we’ll find that the Turks and Caicos Islands also have that same turquoise color.

Both of these countries have many beaches, and some are better than others. According to the World Travel Awards, Turks and Caicos Islands has the best beaches, and the country has held that rank since 2012.

According to the award history for 2012, 2013 and 2014, and according to the “Visit Turks & Caicos Islands‘” website, the best beach is Grace Bay Beach on Providenciales island. Learn more about Grace Bay Beach.

Grace Bay Beach

Grace Bay Beach is located on the west side of Providenciales island. As you can see in the picture above, it looks amazing. But, the beach and water on the eastern side looks even better according to the zoomed-out photo below.

So, what about the Bahamas? According to Lonely Planet, two beaches that meet the criteria above are

  1. Junkanoo beach
    Located in the city of Nassau on the island of New Providence and near the cruise port, this beach gets really crowded.
  2. Tropic of Cancer Beach
    This beach is located in a small town far from Nassau. You may feel lonely at this beach.
Junkanoo Beach
Tropic of Cancer Beach

Another popular beach is Cabbage beach on Paradise Island where the Atlantis resort is in Nassau, Bahamas.

Best Luxury Island Destination

Though the Bahamas may not have won the record for having the best beach, it did consistently win for being the best luxury island destination in the Caribbean.

Probably the most notable luxury spot in the Bahamas is the Atlantis resort on Paradise island.

Other Islands

I’m sure there are many other islands with very nice beaches. Some may even be better than the ones mentioned above, but they may be so remote that they would be difficult to get to. You may think that the U.S. and British Virgin Islands (U.S.V.I and B.V.I.) have nice beaches, but from my personal experience visiting them, they are nowhere as nice as the ones mentioned above. There is one beach on Sint Maarten however that is nice and very unique and attractive among tourists. It’s the Sint Maarten Airport Beach or Maho Beach, where the airport landing strip is literally right next to the beach.

The airport runway is half the length of typical runways, so airplanes have to land close to the start of it to avoid overrunning the landing strip.

Tourists love taking photos of themselves standing right below a plane coming in for a landing.

Weather

The best time to go to the Caribbean is during the winter months when the temperature isn’t too high and rainfall is low. Below are average temperatures and rainfall by month for the Bahamas, Turks & Caicos, and Sint Maarten.

The Bahamas

Turks & Caicos

Sint Maarten

And since many cruises depart from Miami, it may be worth it to spend a few days in Miami before or after the cruise. The weather is Miami similar to that in the Caribbean.

Miami

Based on the graphs above, it would appear that February is the best time to go.

Humidity and Heat Index

Note that the Caribbean has a humid climate, and high humidity actually makes you feel hotter than in low humidity climates. The heat index is a measure of how hot you feel when taking into both temperature and humidity into consideration. Learn more.

In Nassau, Bahamas,

  • On average, September is the most humid month, at 81.0%.
  • On average, April is the least humid month, at 74.0%.
  • The average annual percentage of humidity is: 78%

According to this heat index calculator, if the temperature is 79 degrees and the humidity is 78%, then the heat index is 82 degrees Fahrenheit.

Flights

You can easily find flights from Miami to the Bahamas, Turks and Caicos, and Sint Maarten. Below are non-stop flights to each country, flight time, and cost for travel in February 2024.

DestinationTravel TimeCost
Nassau, Bahamas1 hr 10 min$262
Sint Maarten3 hr$400
Turks and Caicos2 hr$200

Cruises

The Caribbean is a popular region for cruises. Many cruise lines go to all 3 countries mentioned above. But, cruise ships don’t necessarily dock at the specific islands mentioned above. Here are the cruise ship ports of call for each country.

CountryPort of Call
The BahamasNassau City, New Providence Island
The BahamasPrincess Cays
Turks & CaicosGrand Turk
Sint MaartenSint Maarten

In particular, note that Grand Turk is an island in Turks & Caicos that is very far from Providenciales island where the best beach (Grace Bay Beach) is. You’d have to fly from Grand Turk to Grace Bay Beach.

If you are looking for a cruise ship that goes to these islands, you can do a search from sites like Cruiseweb.com where you can specify search criteria like

  • month (January, February)
  • ports of call (Nassau and Grand Turk)
  • etc

The cruise line that primarily goes to Grand Turk is Carnival. Following are some cruise itineraries that meet the criteria above.

Ship: Carnival Magic – 6-Night Cruise

Sun Feb 18, 2024 – Sat Feb 24, 2024

DatePortArrivalDeparture
Feb 18, 2024Miami3:30 PM
Feb 19, 2024Fun Day At Sea
Feb 20, 2024Grand Turk, Turks & Caicos8:00 AM5:00 PM
Feb 21, 2024Amber Cove, Dominican Republic8:00 AM5:00 PM
Feb 22, 2024Fun Day At Sea
Feb 23, 2024Nassau8:00 AM4:00 PM
Feb 24, 2024Miami8:00 AM

Ship: Princess Cruises – 14-Night Cruise

DatePortArrivalDeparture
Feb 11, 2024Fort Lauderdale (Port Everglades), Florida3:00 PM
Feb 12, 2024Princess Cays, Bahamas9:00 AM4:00 PM
Feb 13, 2024Cruising
Feb 14, 2024Ocho Rios, Jamaica8:00 AM4:00 PM
Feb 15, 2024Georgetown, Grand Cayman, Cayman Islands7:00 AM4:00 PM
Feb 16, 2024Cozumel, Mexico10:00 AM7:00 PM
Feb 17, 2024Cruising
Feb 18, 2024Fort Lauderdale (Port Everglades), Florida7:00 AM3:00 PM
Feb 19, 2024Princess Cays, Bahamas9:00 AM4:00 PM
Feb 20, 2024Cruising
Feb 21, 2024San Juan, Puerto Rico9:00 AM10:00 PM
Feb 22, 2024St. Thomas, U.S. Virgin Islands8:00 AM5:00 PM
Feb 23, 2024Cruising
Feb 24, 2024Cruising
Feb 25, 2024Fort Lauderdale (Port Everglades), Florida7:00 AM

Cruise Line Private Islands

Some cruise lines bought or made islands just for their passengers. Since the islands were custom-made for tourists, they have many tourist benefits that you may not find on other islands. Following are some notable islands.

Ocean Cay, The Bahamas: MSC Cruises

This island is located on a former sand extraction site. MSC Cruises owns it. It’s located pretty close to Miami.

Google Maps’ satellite view shows a lot of beaches with turquoise water.

There’s a beach right by the port where the cruise ship docks. If you want calm water and are afraid of accidentally being pulled out to sea, you can swim between the two beaches at the lagoon.

View hi-res version of this photo

Perfect Day at CocoCay, Bahamas: Royal Caribbean

This island is owned by Royal Caribbean and is exclusively for Royal Caribbean guests. The Google Maps satellite view may make you think the water isn’t turquoise, but it’s deceiving. Many photos show that the water is actually very turquoise. Note that the pier can accommodate two ships, so if you want to avoid crowds, try to find a trip when only your ship will dock there.

With so many activities and attractions, CocoCay looks more like an amusement park. Some activities and amenities include

  • waterpark with slides and a wave pool
  • private over-water cabanas
  • freshwater lagoon
  • 1600-foot-long zipline
  • helium balloon ride

Learn more

View Map (PDF)

Castaway Cay, Bahamas: Disney Cruise Line

Castaway Cay is owned by Disney. Most of the island appears undeveloped. The water by the pier seems to be pretty turquoise.

According to the Disney map, the only developed area is by the pier. It’s nice how they have a breakwater barrier to keep the water calm and to block you from accidentally getting pulled out to sea.

Half Moon Cay, Bahamas: Holland America Line

Below is a satellite view of Half Moon Cay, also called Little San Salvador. Only 3% of the island has been developed for cruise passengers. The color of the water looks pretty good. You will find a 2-mile-long powdery white sand beach and a rugged coastline beyond. There is a natural lagoon called Bone Fish Lagoon that is a breeding ground for sharks, turtles and bonefish.

One interesting activity you can do there is ride a horse in the water.

Great Stirrup Cay, Bahamas: Norwegian Cruise Line

Great Stirrup Cay is located next to Perfect Day CocoCay.

Labadee, Haiti: Royal Caribbean

This destination offers some interesting activities. You can go to the mountaintop for a ride on the alpine Dragon’s Tail Coaster. The thrilling descent begins with panoramic views of Labadee from 680 feet above the coastline atop Santa Maria’s lookout mountain. On the way down you’ll reach speeds of 30 miles per hour and zip through 360-degree twists and turns.

There is also a zip line and Superman-style flight line that both let you soar a half mile over the water.

Superman-style

Activities

There are many activities you can do when visiting Caribbean islands, including

Snorkeling

When snorkeling, it would seem better to wear a full-face snorkel mask and a snorkel vest. The mask will give you better visibility and you don’t have to keep your mouth closed. The snorkel vest will easily keep you afloat while allowing your face to be submerged in the water. A life jacket, unlike a snorkel vest, will keep your head above the water, which is not what you want for snorkeling.

Full-face snorkel mask
Snorkel vest

Power snorkeling

Lounging in the water

Whether in a swimming pool or at the beach, these inflatable hammocks are great as they keep your head above the water but your body in it.

Jet ski tour

Explore the island by scooter

Catamaran tour

Parasailing

Ride a banana boat

Cruise around in a seabob

Mini Personal SUB

Other activities include

  • Snuba (with an “n”) diving
  • Scuba diving
  • Fishing
  • Horseback riding in the water
  • Dune buggy tour
  • Swimming
  • Playing at a water park with slides and wave pool
  • Exploring the island by foot, bike, scooter
  • Ziplining
  • Kayaking

Sint Maarten/Saint Martin

This island of Sint Maarten/Saint Martin is shared by 2 nations. Sint Maarten is Dutch and Saint Martin is French. It is the smallest inhabited island in the world. The entire island is just 37 square miles.

Some things to do there include

Planespotting

At Maho beach, you can watch commercial jet planes fly really low over your head as they come in for a landing.

The Royal Islander Club Resort La Plage is located next to the airport landing strip and has access to the beach where planes directly fly over.

Soualiga  Sky Explorer

The Sky Explorer is a chairlift attraction in St. Maarten. The ride is approximately 25 minutes long and takes riders to the top of Sentry Hill, the highest elevation in St. Maarten. The ride spans 2,997 feet and includes two lifts.

Flying Dutchman

The Flying Dutchman is the world’s steepest zip line! You’ll be attached to a flight line in a secure harnessed chair, launching you on the 1050-foot drop in elevation over 2800 feet to experience the ride of a lifetime.

Sentry Hill Zip Line

Schooner Ride

Melange Grill

This restaurant is similar to Brazilian BBQ and Korean BBQ.

  1. Select your Appetizer
  2. Choose your Salad
  3. Enjoy a continuous flow of grilled meats and Seafood right at your table with an assortment of sauces and sides !!

Horseback Riding (1-hour tour)

Lucky Stables at Seaside Nature Park offers a wide variety of tours and trail rides. Ride horses peacefully along one of the many trails that span this beautiful island. Or, ride into the sea with your horse and treat the animals to a cooling swim in the ocean!

Hiking Tour

The many trails at Seaside Nature Park can be explored easily with some water and sturdy hiking shoes while sharing in the extensive knowledge of a professional guide about the flora, fauna and history of the park.

Price starting at $ 10 per person per hour.

https://seasidenaturepark.com/activities/hiking/

Guana Bay hiking tour: $39

https://www.trisportsxm.com/guana-bay-hiking-tour-tour-11.html

Explore the boardwalk

Segway Tour

Explore the boardwalk by segway. https://sxmcoolride.com/

Jet Ski Tour

https://www.wearesxm.com/watersports/jet-extreme/

https://www.wearesxm.com/watersports/bigfoot-watersports/

Jet Ski 30 min = $60
Jet Ski 60 min = $120
Jet Ski Tour 2 hours = $200

E-bike Tour

https://www.trisportsxm.com/tours.html

ATV Tour

Itinerary for Maximum Activities

People have different preferences when it comes to vacation. Some may want to just be a beach bum. Others may want to just do casual sightseeing. For me, I want maximum activity options and clean, turquoise beaches with fine white sand. I also want to go on a cruise because that in and of itself is an experience full of on-board fun activities. Since it’s not possible to cruise to the best beach in the world, Grace Bay Beach in Turks and Caicos, and since Perfect Day at CocoCay is the most developed cruise-owned island full of convenient vacation activities, I think my preferred itinerary would include Perfect Day at CocoCay. And since Nassau is nearby, is a common cruise port of call, and is a popular destination, it would also be on my itinerary. Sint Maarten is one particular island with a lot of fun activities as well, but it may not be possible to find a cruise that goes to all 3 locations. Plus, spending one day at Sint Maarten is likely not long enough. So, I think my preferred itinerary would be

  • Flight: Home > Miami (spend 0 to 3 nights)
  • Cruise:
    • Miami
    • Nassau (Atlantic AquaVenture, Cottage Beach, Downtown)
    • Perfect Day at CocoCay
    • Day at Sea
    • Miami
  • Flight: Miami > Sint Maarten (2 or 3 nights) > Miami
  • Flight: Miami > Home (spend 0 to 3 nights)

Here’s one actual itinerary.

4 Night Bahamas & Perfect Day Cruise

Ship: Royal Caribbean Freedom of the Seas

DatePortArrivalDeparture
Mon, Feb 12, 2024Miami4:30 PM
Tue, Feb 13, 2024Perfect Day at CocoCay7:00 AM5:00 PM
Wed, Feb 14, 2024Cruising Day at Sea
Thu, Feb 15, 2024Nassau, Bahamas8:00 AM5:00 PM
Fri, Feb 16, 2024Miami6:00 AM

Pricing by Room Category:

Interior$293
Outside View$422
Balcony$595
Suite$961

Note that the balcony is pretty small.

Atlantis Resort

  • Hotel room: Minimum 2-night stay: $270 – $359 / night.
  • Day Pass: $190 / person

There’s a hack to get access to Atlantis without spending 2 nights and paying a high price. If you stay at the Comfort Suites on Paradise Island, Bahamas, you’ll have full access to Atlantis, which is just a 3-minute drive away. As an example, the cheapest cost to stay at Atlantis on February 19. 2024 is $363 / night with a minimum 4-night stay. The cost to stay at Comfort Suites on the same dates is just $246 with no 4-night-minimum restriction.

Cruise Ports

Some cruise ports can accommodate multiple ships at the same time. The more ships there are, the more crowded the place will be. Therefore, it’s preferable to choose a trip with the fewest ships at your scheduled ports of call.

Nassau

As you can see, the port at Nassau can accommodate up to 5 ships.

For the itinerary above, the ship “Freedom of the Seas” is scheduled to dock on Feb 14, 2024. The Nassau, Bahamas cruise terminal website shows the schedule by month. Here’s the schedule for February 2024. Unfortunately, it looks like the terminal will be full of ships that day.

Perfect Day at CocoCay

Perfect Day at CocoCay is owned by Royal Caribbean, so only their ships can dock there. The port is smaller. It can accommodate a maximum of 2 ships. For the itinerary above, the ship “Freedom of the Seas” is scheduled to dock on February 13, 2024. According to CruiseMapper.com, there will be 2 ships that day.

Miami

Since many cruises depart from Miami and Miami itself is an interesting destination, it makes sense to spend some time there before or after going on a cruise.

Following are some things to do when visiting Miami.

Miami Hop-On-Hop-Off Bus

Go on a double-decker, open-air hop-on-hop-off bus and be taken around many of the tourist spots. This is an easy way to see a lot and get a sense of the area. Afterwards, you can spend time at individual spots you are interested in. There are many tour bus operators. BigBus, shown below, is just one of them.

Day Tour (Red Loop): $43

https://www.bigbustours.com/en/miami/miami-routes-and-tour-maps

Stop #Location
1Bayside Marketplace
Island Queen Millionaire’s Row Cruise
Skyviews Miami
Miami Beach Boardwalk
2South Beach
Big Pink (restaurant)
ARTECHOUSE Miami
Miami Beach Boardwalk
3Soundscape Park
Espanola Way
Museum Of Illusions
Miami Beach Boardwalk
4Indian Creek
Miami Beach Boardwalk
5Mid Beach / RIU Hotel
Miami Beach Boardwalk
6North Beach / Fontainebleu & Lexington Hotels
Miami Beach Boardwalk
7Design District / Midtown
8Wynwood Walls
9Downtown / Holiday Inn
Bayside Marketplace
Thriller Miami Speedboat Experience
10Little Havana
Learn more

Wynwood Walls

Unique outdoor destination featuring huge, colorful street murals by artists from around the globe.

Bayside Marketplace

Enjoy a drink along the water (or on it), snagging a seat at one of Bayside Marketplace’s big-name restaurants or setting off on a sunset cruise touring Biscayne Bay’s islands.

Lock & Load Museum

Look at all sorts of guns and practice shooting some.

ARTECHOUSE MIAMI

Art + Technology Museum

Superblue Miami Immersive Art Experience

Explore a mirrored labyrinth, see digital worlds immersed in seasonal flowers and waterfalls, and watch your own heartbeat as it glows with 3,000 lights.

Airboat Everglades Tour

Thriller Miami Speedboat Experience

Learn more

Yellow path is Thriller Miami Speedboat Route

Jet Ski Tour

Wings Over Miami Air Museum

Skyviews Miami Observation Wheel

Miami Beach

Explore Miami Beach / South Beach by E-Bike or Segway

Fat tire e-bikes can ride on sand.

E-bikes are prohibited on all sidewalks in Miami Beach, including along the Beachwalk. They are also prohibited on South Pointe Park and Pier, Marina Baywalk, and Lincoln Road Mall.

However, Florida state law allows e-bikes to be operated in the same locations as regular bicycles. This means they can be ridden on: Roads, Bike lanes, Bike paths, Multi-use paths, Sidewalks.

If your e-bike is class 1 (or maybe 2) and limited to 20mph, you should be legally allowed on the beach.

Florida allows all classes of e-bikes, including Class 3 e-bikes — provided they don’t exceed speeds of 28 mph. The bike also can’t have an electric motor power with a wattage exceeding 750.

Miami Beach also has 11 miles of green bicycle lanes.

Free Miami Beach Trolley

From 8 a.m. to 11 p.m., 7 days a week at approximately 20-minute average service frequency along each route.

Lines:

  • North Beach Loop
  • Middle Beach Loop
  • South Beach Loop (A and B)
  • Collins Express

Millionaire’s Row™ Cruise

Explore Miami aboard a fully-narrated bilingual sightseeing cruise along scenic Biscayne Bay – a top-rated thing to do in Miami! Cruise around Biscayne Bay and see the spectacular coastal sites including the beautiful downtown Miami skyline, the Port of Miami, Fisher Island, Miami Beach and “Millionaire’s Row™” – the Homes of the Rich and Famous™.

Learn More

The Phillip & Patricia Frost Museum Of Science

This is a science museum, aquarium and planetarium. The cutting-edge 250-seat Frost Planetarium takes you on visual joyrides that both thrill and educate. Though it might seem like you’re really hurtling through space or weaving through a coral reef or DNA strand, that ultra-real immersive experience is the result of a 16-million-color 8K visual system using six 3D-capable projectors and surround sound. The dome is tilted forward at 23.5 degrees, allowing its 67-foot span to fill your field of vision as if you’re flying—imagery comes at you from above, below and the peripheral edges, creating a nearly 360-degree view of whatever world you’re in.

Learn More

Espanola Way

Española Way is a historic street in Miami Beach, Florida. It’s located between 14th and 15th Streets, between Washington Avenue and Pennsylvania Avenue. It’s a pedestrian-only street with shops, galleries, restaurants, and bars. 

Museum Of Illusions

Website

Experience stunning 3D illusions and art at the Museum of Illusions in Miami. Capture memorable, interactive photos and have fun with friends and family.

Lincoln Road Shopping District

Miami Beach’s Lincoln Road is one of the most unique shopping districts in the world,  full of stunning architecture, world-class culture and destination retail stores spanning 8 blocks.

Website

How to Clearly Explain Website Update Requests

If you’re a non-technical person who is part of a marketing team working for a company that depends a lot on a website, chances are you will often need to ask a team of web developers to make website updates for you. Your particular website may not be easily updated using a content management system (CMS), and even if it could, many non-technical people would rather just send an email to request their website changes. Asking developers to update a website is fine, but only if the update requests are clear. Otherwise, the requestors risk wasting their time and other people’s as well. Unfortunately, the reality is most people don’t know how to clearly communicate their change requests. There are many website annotation tools that claim to be able to simplify the communication process, but in real-world situations, I haven’t found any that were good enough. Plus, adding a new tool requires learning something new, which many people are unwilling to do or don’t have time for.

In this post, I’ll share one approach that non-technical people can use to easily and clearly communicate website change requests to minimize misunderstandings, delays, and lots of back-and-forth messages. And since most people already know and are comfortable using MS Word or Google Docs, this approach only requires a word processor.

Website Sections

Most websites contain a vertical series of sections. For example, Adobe has a product page for its video editing software, Adobe Premier. This web page can easily be divided into a bunch of sections.

Change Request Doc

Since a picture is worth a thousand words, it’ll be a lot easier to show a screenshot of a section of a web page rather than try to explain the section using words. And since you may want to move some sections around, it’s helpful to number each section. And since you may collaborate with other people in requesting website changes, we’ll use MS Word or Google Docs for our change requests. I’m going to use Google Docs because I find it easier to use.

  1. Create a new Google doc
  2. Give it a name like “Adobe Premier Product Page Changes”.
  3. Change the page margins to 0.25″ on all sides
  4. Under View, uncheck “Show print layout” if it is checked.
  5. At the top of the doc, put the URL to the page, e.g. https://www.adobe.com/products/premiere.html
  6. Insert a table containing 3 columns and 20 rows.
  7. In row 1, cell 1, enter “#”
  8. In row 1, cell 2, enter “SECTION”
  9. In row 1, cell 3, enter “CHANGES”
  10. In the first column, enter a consecutive number in each cell starting from 1 and make it narrow enough just for the numbers
  11. Take a screenshot of each section and paste them in the middle column
  12. In the right column, describe your change request.

Here’s an example.

View the sample Change Request Google Doc.

Improve Music Audio Quality with a Wireless Bluetooth DAC+AMP

There are at least 3 major things that affect music audio quality:

  1. Speakers
  2. Audio source, e.g. mp3 file, FLAC file, etc
  3. Digital-to-Analog Converter (DAC)

Some people may argue that transmitting audio over Bluetooth degrades sound quality, but the reality is the difference is so small that it’s negligible.

Speakers

Needless to say, quality speakers are necessary to hear music at a higher quality. Don’t expect to hear quality audio from cheap $10 earphones. Since I’m not an audiophile and I’m not interested in spending thousands of dollars just for speakers, I just have what I guess are prosumer speakers. Specifically, I have:

And since it makes no sense to buy them at full price, I buy them renewed on Amazon for a big discount because even renewed, they look and function exactly like they are brand new.

The WH-1000XM4 has a better sound stage, but it’s bulkier and leaks audio a lot. Also, it’s not great for working out because I feel it moves around too much and gets in the way of my workout. The WI-1000XM2 is compact, doesn’t leak audio, and can easily rest on my neck when not in use. The problem is when listening to music on my phone, the volume is often not high enough, especially when at the gym or when traveling by plane. This is where having an amplifier (amp) takes care of volume issues.

Audio source

I’ve dabbled with lossless FLAC files, but when compared to high-bitrate mp3 files, I personally can’t notice a big enough improvement to justify the cost and huge file size. I’m okay with mp3s as long as the bitrate is high enough. I normally just buy mp3s from Amazon Music. Don’t expect to hear quality audio from low-bitrate mp3s, though. The compression is too lossy.

Digital-to-Analog Converter (DAC)

Chances are you probably listen to music from your phone and sometimes from your laptop like me. The problem is the converters in them that convert digital audio signals to analog signals are likely of low quality. I have the Google Pixel 4a 5G smartphone. It’s a mid-range phone. But even if you have a high-end phone, the digital-to-analog converter (DAC) is most likely not as good as a dedicated DAC. Fortunately, there are small Bluetooth DACs that are lightweight and can clip onto your shirt. I tested the EarStudio ES100 MK 2 ($60 renewed, $80 new on Amazon).

When comparing the audio quality with and without this DAC, it’s clear that the DAC makes a decent, if not big, difference, depending on the song I’m listening to. The DAC is also an amplifier and can increase the volume to levels higher than I’d ever need it to be. It didn’t come with an aux cable, so I bought a short 4-inch one. The setup might seem complex, but it’s not that bad, especially if you’re just sitting for a long time, like on a long flight.

Instead of pairing your head/earphones to your audio source (phone, laptop, etc), you pair the DAC to it.

Though it has volume controls, I find it easier to adjust the volume from the phone app. It’s recommended to set the source volume (phone or laptop volume) to max and to adjust the analog (DAC) volume. The app has a lot of options and clear explanations, but I find the default settings to be sufficient.

Host PDFs in AWS CloudFront CDN and Enable Redirects Using CloudFront Functions & Lambda Functions

Many website files include PDFs. These PDF files are usually much larger than other file types and can take up a lot of space. You may want to keep all website files like images and PDFs (binary files) together with your HTML, CSS and JS files (text files) and put them all in version control, like GitHub, but there are downsides to this:

  1. Git version control is designed for text files, not binary files. Even though you can use Git LFS so you can version your binary files, there are simpler, better alternatives.
  2. Website images are better served from an image CDN like Cloudinary or ImageKit. These services will automatically and quickly optimize images on the fly.
  3. PDF files are better served from a CDN. Amazon AWS S3 can be used to store your PDFs with versioning and AWS CloudFront can serve those PDFs from a CDN. With CloudFront, you can also write a function to redirect one PDF file to another in case you need to delete a file.

As of this writing, the AWS CloudFront CDN has 218 global edge locations.

The steps below describe how to set up AWS S3 and CloudFront to host PDFs and to set up redirects.

Note: you can create redirects using AWS Lambda functions (launched in 2017), but they are more complicated and cost 6 times as much as the cost of CloudFront functions (launched in 2021). Learn more.

1. Create an S3 bucket

Log in to the AWS console, go to S3, and click “Create bucket”. Choose a bucket name like “pdfs”.

Since you want people to be able to access the PDFs, uncheck “Block all public access” and check “I acknowledge that the current settings might result in this bucket and the objects within becoming public.”

If you want, click the radio button that enables versioning

Ignore the other options, if you want, and then click the “Create bucket” button.

2. Upload PDFs

You can drag and drop your PDFs to upload them. If you have many PDFs, like thousands, then it’s better to use the AWS CLI S3 Sync command.

As a test, I just uploaded 2 PDF files/

3. Create a CloudFront Distribution

In the AWs console, go to CloudFront and click “Create Distribution”. For “Origin domain, choose the Amazon S3 bucket you created in step 1.

For the viewer protocol policy, choose “Redirect HTTP to HTTPS” since that’s a good policy IMO.

Ignore all other options, if you want, and click the “Create Distribution” button.

Now, the PDF files in your S3 bucket will be available in a CDN at the CloudFront domain provided, e.g. d2a5k3j4u1zr32.cloudfront.net/test-pdf-1.pdf

4. Create a CloudFront Function to Redirect Requests

Click on the distribution and then click on “Functions” in the left sidebar.

Click the “Create Function” button and enter a name for the function, e.g. “Redirects”.

You will see 3 tabs: Build, Test, and Publish.

In the “Build” tab, enter the code below and customize as needed.

Note that there is a 10 KB limit on the size of your CloudFront function.

Click the “Save Changes” button and then click the “Test” tab. You will see a field labeled “URL Path” with a default value of “/index.html”.

Since we don’t have a redirect rule for that URL path, we don’t expect any redirection to happen. Click the “Test Function” button. You will see output like below indicated that the response URI is “/index.html” as expected.

Now, change the URL path to one you have a redirect for. In my example code, I am redirecting “/test-pdf-2.pdf” to “https://www.google.com”. Click the “Test Function” button. The output shows “https://www.google.com”.

Now, publish the CloudFront function. Click the “Publish” tab, then click the “Publish Function” button.

Click “Add Association” to associate the function to your distribution. Choose your distribution in the Distribution field. Leave Event Type as “Viewer Request” and ignore Cache behavior. Click the “Add association” button.

Note that you can only have one CloudFront function for a given cache behavior and event type.

Wait for the function to be deployed. Go back to the function list page and check the status column. It will say “Updating” for a few minutes.

Wait a few minutes. Reload the page. The status should change to “Deployed”.

Now, test out the redirect in production by going to the CloudFront URL of a path you have a redirect for. You should see the redirect work.

Using Lambda Functions

Make sure the location is set to us-east-1.

Go to the Lambda page and click “Create function”.

  1. Enter a name for your function.
  2. Under “Execution Role”, choose “Create a new role from AWS policy templates”
  3. Enter a role name
  4. Under “Policy Templates”, choose “Basic Lambda@Edge permissions (for CloudFront trigger)”. This is IMPORTANT. Do NOT choose “Create a new role with basic Lambda permissions”.

In the “Code” tab, enter the redirect code below and then click File > Save.

In order to test your code, you must deploy it first. Click the Deploy button.

  1. Test your code by clicking the “Test” tab
  2. Choose “Create new event”
  3. Enter a name for the test
  4. Replace the event JSON with relevant test data, e.g.
{
  "Records": [
    {
      "cf": {
        "config": {
          "distributionId": "EXAMPLE"
        },
        "request": {
          "uri": "/docs/test-pdf-2.pdf"
        },
        "response": {
          "status": "302",
          "statusDescription": "Found",
          "headers": {
            "location": [
              {
                "key": "Location",
                "value": "https://example.com"
              }
            ]
          }
        }
      }
    }
  ]
}

Click the “Save” button and then the “Test” button.

You will either see an error or a success response similar to what’s shown below.

Under “Actions”, click “Deploy to Lambda@Edge”. This will deploy the Lambda function to the CloudFront edge network.

  1. Choose your CloudFront distribution from the dropdown list.
  2. For CloudFront event, choose “Origin Response”.

The green banner will state that the function is being replicated, but that it will take a few minutes to complete.

Go to the CloudFront distribution. You’ll see the status “Deploying”. Wait till it changes to a date/time indicating the deployment has completed.

Invalidate the CloudFront cache for all objects using /*

When the trigger is created, it will create a new Lambda function version. Click on the “Versions” tab and then click the version number to see that the trigger is saved in the version.

You will then see the CloudFront trigger in the diagram and other saved details.

Test the redirect using the cURL command.

If you need to remove a Lambda function from a Cloudfront distribution,

  1. go to the distribution
  2. click “Behaviors”
  3. choose a behavior and click “Edit”
  4. Scroll down to “Function Association” and select “No association” for the function type
  5. Click “Save changes”
  6. Invalidate the Cloudfront distribution using /*

Put Redirect Data in an External JSON File

The instructions above work, but whenever you want to update the redirects, you have to edit the lambda JavaScript function and redeploy it to the Cloudfront edge. The deployment process takes about 5 minutes. To improve this process, we can move the redirect data to a JSON file in an S3 bucket. Then, you can just upload an updated JSON file, overwriting the existing file, and the updated redirects will work immediately. Here’s how to do that.

Create a JSON file containing all redirects like the following and upload it to S3.

{
  "/file1.pdf": { "to": "/file2.pdf", "statusCode": 301 },
  "/resources/file3.pdf": { "to": "/resources/file4.pdf", "statusCode": 301 },
  ... etc. ...
}

Add permissions to the lambda function to have read access to S3. Go to Lambda > Functions > and click on the function name. Then, go to Configuration > Permissions > Execution Role > and click on the role name.

A new tab containing the role’s permission will open. Under “Permissions policies”, click on the policy name.

That will open a new tab showing the permissions defined in the policy. Click the Edit button.

A new table will open showing the existing permission. Add the following S3 permissions. Replace “mybucket” with the name of the S3 bucket where you put the JSON redirect file.

"Effect": "Allow",
	"Action": [
		"s3:Get*",
		"s3:List*"
	],
	"Resource": [
		"arn:aws:s3:::mybucket",
		"arn:aws:s3:::mybucket/*"
]

The entire JSON object may look like this.

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Effect": "Allow",
			"Action": [
				"logs:CreateLogGroup",
				"logs:CreateLogStream",
				"logs:PutLogEvents"
			],
			"Resource": [
				"arn:aws:logs:*:*:*"
			]
		},
		{
			"Effect": "Allow",
			"Action": [
				"s3:Get*",
				"s3:List*"
			],
			"Resource": [
				"arn:aws:s3:::mybucket",
				"arn:aws:s3:::mybucket/*"
			]
		}
	]
}

Back at the lambda function page, click on the Code tab and update the code as follows:

Replace the first 3 constant values with your S3 bucket’s region, bucket name and the path to the redirect JSON file.

const REDIRECTS_DATA_REGION = 'us-east-1';
const REDIRECTS_DATA_BUCKET = 'pdfs';
const REDIRECTS_DATA_OBJECT = 'docs/pdf-redirects.json';

Click “Deploy” so you can test the lambda function. Once you verify it is working, go to Actions > Deploy to Lambda Edge. Follow the remaining steps as shown above.

Resources

  • https://making.close.com/posts/redirects-using-cloudfront-lambda-edge

Passing UTM Name/Value Pairs to Specific Links on a Website

Adding UTM parameters to links is useful for tracking marketing efforts, e.g. if you have a banner or an email with links to a landing page, you’ll want to know which method (banner or email) generated the most page visits and form fills. Google has a campaign URL builder that will generate URLs with UTMs for you. In Google Analytics, you can find pageviews to the landing page by UTM parameter. However, if you want to track any subsequent pages after the landing page, then you’ll need a way to pass the UTMs along to the subsequent pages. In my particular situation, I needed to pass UTMs to a 3rd-party site. The visitor flow would be like this

  1. Click a banner on the home page of example.com. The banner has UTMs in the query string, e.g. example.com/landing-page?utmsource=home-page-banner
  2. Land on an overview page on example.com, e.g. example.com/landing-page
  3. Maybe visit other pages on example.com
  4. Return to example.com/landing-page
  5. Click a link to register for something on a 3rd-party site, e.g. foo.com/register

By default, only the first pageview of example.com/landing-page would include UTMs in the URL. To pass the UTMs to the link to the 3rd-party site, something extra needed to be done. I chose the following approach, which works well.

  1. Write JavaScript code that runs on all pages.
  2. If a URL contains UTM params, save the UTM name/value pairs as session cookies, overwriting any existing UTM cookies.
  3. If a page has any <a> tags with the class “appendUTM”, then rewrite the href value by appending the UTM params.

I then added the class “appendUTM” to any links where I wanted to append the UTMs. In my case, it was the links to the 3rd-party registration site.

Below is the code that accomplishes this.

Separating Website Images and Bulk Uploading Them to AWS S3 Using AWS CLI

I recently had to move 35,000+ website images from Git to AWS S3. The images were in many subfolders. First, I had to separate the images from all other files. Then, when I tried dragging and dropping the parent folder containing all images to the AWS S3 web interface, I had to wait 9 to 17 hours.

When I woke up in the morning, I found the upload completed with errors:

Here’s how I easily separated the images from all other files and successfully uploaded all 35,000+ images.

Separate images from other files

First, I wanted to see a list of all unique file extensions so I could know what image file extensions were being used.

find . -type f | sed 's|.*.||' | sort -u

This returned a list like the one below.

JPG
PNG
ali
bmp
brs
cnd
CSS
...

Then, I copied the website root folder and made a new sibling folder called website-images where I’d just have the images.

Then, I deleted all images from the “website” folder using the following command.

find . -type f ( -name 'gif' -or -name 'jpg' -or -name '.JPG' -or -name '.png' -or -name '.PNG' -or -name '.bmp' ) -delete

Then, I deleted all non-image files from the “website-images” folder using the following command.

find . -type f -not ( -name 'gif' -or -name 'jpg' -or -name '.JPG' -or -name '.png' -or -name '.PNG' -or -name '.bmp' ) -delete

The last command resulted in a bunch of empty folders. I deleted the empty folders using this command.

find . -empty -type d -delete

I then wrote and ran a NodeJS script to walk through each HTML file and convert each relative path to a path relative to the website root folder, e.g.

../assets/images/images/home_page_banner.png

to

/public/en/csam/latest/assets/images/images/home_page_banner.png

Upload all images to S3

As mentioned earlier, uploading 35000 images to S3 using the web interface took a long time and kept completing with errors. What ended up working was uploading the images using the AWS CLI. Here’s how I did it.

Install AWS CLI

Here’s the documentation. I ran the command line installer.

curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg AWSCLIV2.pkg -target /

Create an access key

I had to create an access key to authenticate. I created a new Identity and Access Management (IAM) user and then clicked the “Create access key” button to generate a new key.

I ended up with 2 keys similar to the ones below:

  1. Access key: AKIAIOSFODNN7EXAMPLE
  2. Secret access key: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

Set access key as environment variables

I then saved those key values as environment variables. Here are the instructions. I basically ran the following commands in the terminal, replacing the values with my actual values.

export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
export AWS_DEFAULT_REGION=us-west-2

For the default region, I chose the region for my S3 bucket.

Upload (sync) files

I then uploaded (synced) files from my local to my remote S3 bucket. Here’s the documentation for the S3 sync command. Since I had already uploaded some files, I was hoping to find a flag to skip uploading files that exist at the destination. It turns out that the “sync” command does this by default. I ran the following command in dry-run mode to verify the output was correct.

aws s3 sync . s3://q-website-images/docs/ --dryrun

Then, I reran the command without the dry-run flag.

aws s3 sync . s3://q-website-images/docs/ 

The command output a list of the files it uploaded.

When it was done, I tried rerunning the command only to find that it completed with no output, indicating that all source files already existed in the destination. That was a sign that the sync was complete. Looking at the number of files in the S3 web console, I could see the correct number of files listed there.

Now that the images are in S3, I’ll use S3 as the origin for an image CDN (ImageKit). ImageKit will auto-optimize the images.

Simple Steps for Losing Weight and Building Muscle

Step 1: Determine Maintenance Calories

Your maintenance calories is the number of calories you consume and burn each day to neither lose nor gain weight. Enter your information in this online calorie calculator by the Mayo Clinic. It uses the Mifflin-St. Jeor equation, which pros consider the gold standard.

For me, my maintenance calories is currently 2650 calories per day.

Step 2: Calculate Calories & Protein to Lose Weight and Build Muscle

Losing Weight (Fat)

In order to lose weight by losing fat, you just need one thing: a net deficit of calories. But you don’t want too large a deficit because then you’ll lose both fat and muscle. You should target a deficit of 5 to 10% of your maintenance calories. You can lose weight by just

  • consuming fewer calories without exercising
  • consuming more calories but burning extra calories by doing cardio exercises like running

Whether you just rest or you exercise, your net calorie deficit should be 5 to 10% of your maintenance calories. For me, this value is currently between 2385 and 2517 calories.

Gaining Muscle

In order to gain muscle, you need 4 things:

  1. a net surplus of calories
  2. strength training until failure
  3. sufficient protein consumption
  4. rest (minimum 7 hours a day)

For the calories, you don’t want too large a surplus because then you’ll gain both muscle and fat. You should target a surplus of 5 to 15% of your maintenance calories. For me, this value is currently between 2782 and 3047 calories.

For the protein, you should target consuming 1 gram of protein for each pound of body weight. So, if you weigh 180 lbs, you should consume 180 grams of protein.

The calorie (energy / fuel) surplus is needed to rebuild the muscle you’ve broken down during strength training. Breaking down muscle fibers only happens if you train to failure. The large protein consumption is needed because muscles are made of protein. Muscle (protein) synthesis occurs while you’re sleeping, which is why it’s necessary to sleep enough after strength training.

Target Calorie & Protein Summary
DayCalorieProteinMy Target
Rest or Cardio5-10% deficitAny amount2385-2517 calories,
any protein
Strength Training5-15% surplus1 gr / lb of body weight2782-3047 calories,
180 grams of protein

Studies show that consuming high amounts of protein while in a calorie deficit can preserve muscle mass and accelerate fat loss. Therefore, if possible, consume a lot of protein daily, not just on strength training days.

Step 3: Make a Weekly Schedule

Your weekly schedule would be a combination of resting days, cardio days, and strength training (weight lifting) days. Here’s an example.

DAYACTIVITYCALORIES
MondayRestCalorie Deficit, Extra Protein
TuesdayStrength TrainingCalorie Surplus, Extra Protein
WednesdayCardioCalorie Deficit, Extra Protein
ThursdayRestCalorie Deficit, Extra Protein
FridayStrength TrainingCalorie Surplus, Extra Protein
SaturdayCardioCalorie Deficit, Extra Protein
SundayStrength TrainingCalorie Surplus, Extra Protein

For strength training, you need to wait at least one day in between working the same muscle group, e.g. don’t do chest presses every day. Do them at most every other day because muscle protein synthesis (MPS) takes 36-48 hours on average and working the same muscles during that time will interfere with synthesis.

Step 4: Make a Meal Plan

When it comes to losing weight, you just need a calorie deficit, but you should consume healthy calories, e.g. no processed food, no added sugar, etc. For me, I try to stick to a keto diet, although that’s not absolutely necessary.

When it comes to building muscle, the hardest part will be trying to consume sufficient protein. If you weigh 180 lbs, you need to consume 180 grams of protein. That’s actually hard to do, which is why many people consume protein shakes to supplement their meals.

Here’s a list of protein-dense foods that can help you reach your protein consumption target.

FoodQuantityProtein (g)CaloriesProtein Density
Egg1 large6788%
Egg Whites1 large41822%
Chicken breast15328419%
96/4 beef pattie12515017%
Greek yogurt6 oz2014014%
Soy milk1 cup71006%
Whey protein concentrate supplement1 scoop2513019%
Turkey breast2612521%
Tuna2712821%
Premier protein shake13016019%
Kirkland chewy protein bar1101905%

I personally find chicken breast difficult to cook in a short amount of time while still tasting good. So, I opt for packaged options like Lightly Breaded Chicken Breast Nuggets. These have added protein, are easy to cook, and taste decent. Other similar options taste better, but they have less protein and more calories, e.g. Kirkland Signature Lightly Breaded Chicken Breast Chunks, Boneless Skinless.

Example Meal Plan

Target Protein (grams) Consumption (muscle building):180
Target Daily Calorie Consumption (muscle building):2782-3047
Target Daily Calorie Consumption (weight loss):2385-2517

Since the hardest thing is consuming enough protein, the meal plan below will focus on foods that will hit the target protein amount of 180 without consuming an excess of calories. If there is a calorie deficit, you can easily add any kind of healthy food to reach the calorie target.

Food / IngredientUnitProtein (g)CaloriesQuanitityTotal ProteinTotal CaloriesProtein Density
Breakfast
Eggs1 large6784243127.69%
Mozzarella string cheese stick178017808.75%
Premier Protein Shake (Chocolate)13016013016018.75%
Lunch
Keto Beef Cheeseburger
Keto burger bun1 bun9801980
96/4 lean beef pattie1 pattie25150125150
Cheddar cheese1 slice5901590
Mayo1 tbsp0351035
Ketchup1 tbsp0201020
3937510.40%
Protein Shake00
Vanilla greek yogurt1 cup (150 gr)20140120140
Whey protein powder1 scoop25130125130
Unsweetened soy milk1 cup6.310516.3105
Creatine powder1 scoop00100
Glucomannan powder1 scoop00100
Frozen berries1/2 cup0351035
51.337513.68%
Dinner
Keto Chicken Cheeseburger
Keto burger bun1 bun980198011.25%
Grilled Chicken Pattie1 pattie2012012012016.67%
Cheddar cheese1 slice59015905.56%
Mayo1 tbsp03510350
Barbecue sauce1 tbsp051050
3433010.30%
Kirkland Chewy Protein Bar1 bar101901101905.26%
Anything else (pasta, fries, etc)
Total195.31792

Step 5: Exercise

Cardio

For cardio, you can do anything from hiking, dancing, running, biking, etc. If you’re low on time, you can buy a recumbent exercise bike with resistance. It lets you lay back and exercise in a comfortable position. The one below is lightweight and small and costs $178. You can easily put it in your living room and use it while watching TV.

Marcy Recumbent Exercise Bike with Resistance ME-709

Another low-intensity option is to simply walk. A common goal is to target 10,000 steps per day, which is about 5 miles. You can also walk at home while watching TV. Some walking pads can easily be stored and don’t make a lot of noise. This one, for example, comes with the following features

  • optional 3% incline
  • low 45 dB noise
  • remote control
  • large display
  • belt dimensions: 17″ x 48″
  • overall dimensions: 27″D x 50″W x 5″H
  • supports Zwift and Kinomap
  • Speed: 0.6-7.6 mph (~1350 – 17000 steps)
  • foldable
Strength training

For strength training, you should do the following:

  • For each exercise, do 3 sets of 8-12 reps with 1-3 minutes of rest in between
  • For each set, do as many reps until failure (you can no longer complete a full rep)
  • Periodically increase the weights (progressive overload)
  • Ensure you feel stimulation in the target muscle. If you don’t, then you may be doing the exercise wrong and you will see limited results. Some call this the mind-muscle connection.

When it comes to building muscle, what matters most is volume. For example, both of the following will produce the same results.

Weight (lbs)RepsSetsTotal Volume
100531500
501031500
Accessories

While working out, I’ve found the following accessories helpful.

Compression t-shirt

A compression t-shirt helps you see your physique so you can visually see your progress and which areas to target. I use the Under Armour Men’s HeatGear Compression Short-Sleeve T-Shirt.

Bluetooth headphones

Playing certain types of music can be motivating and make exercising more enjoyable. Many people wear bulky on-ear headphones. I prefer in-ear neckband earphones because they don’t move around and are lightweight. They also block out ambient noise pretty well. I wear the Sony Wireless Behind-Neck Headset (WI-C400).

Workout gloves

If you don’t wear padded gloves, you can easily develop calluses (thickened skin that forms as a response to repeated friction or pressure). Lifting weights is much more comfortable while wearing padded gloves.

Step 6: Count Calories

For calorie consumption, you can count calories by adding up all calories for each ingredient or food you consume. Look at the nutrition label on food packaging and/or look at online calorie databases.

For calorie expenditure, don’t rely on a smartwatch. Their calorie tracking can be way off. Instead, wear a heart rate monitor like the Polar H10 Heart Rate Monitor Chest Strap. You can track your calories both on your smartphone and online. Buy it on Amazon.

To see how inaccurate a smartwatch measures calories burned, today I used both my Fossil Gen X watch and the Google Fit watch app to track calories burned. I also used the Polar H10 chest strap. I did strength training for 1 hour and 10 minutes. When I started tracking on my watch, I chose “indoor workout,” and the phone app just started tracking calories, time spent, heart rate, etc. When I started tracking using the Polar H1 app on my phone, I was able to choose “Strength training” before the device started tracking vitals. Once I was done exercising, I stopped both apps. As you can see below, the smartwatch says “Run”, which I guess means it thought I was running on a treadmill. It also says I burned 482 calories. In the Polar H10 app on my phone, it says I burned 759 calories. That’s way more than 482, with a difference of 277 calories. While I was exercising, I had my Bluetooth earphones on. The Polar H10 app would send an audio message like “You are improving your fitness” or “You are burning fat”. It would say the former when I was doing strength training and the latter when I was resting.

Step 7: Measure Progress

Weight Loss Progress

Measuring your weight loss is easy. Just regularly weigh yourself. To automate this, buy a Wi-Fi scale that records and keeps track of your weight and shows a graph of your progress on your phone. I personally use the Withings Body – Digital Wi-Fi Smart Scale with Automatic Smartphone App Sync. If weighing yourself every day, make sure to do it right before bed or first thing in the morning for more accurate results.

Muscle Gain Progress

To track your muscle gain, you’ll need to track your strength training weights, reps and sets for each exercise. Personally, I log my workouts using the free version of the FitNotes app. It’s a simple and easy-to-use app that just works. I can easily see my most recent reps and weights so I can either match or exceed them.

If you are able to lift heavier weights and perform more reps, then you must be building muscle, even if it’s not immediately noticeable in the mirror. You can also try measuring the circumference of different parts of your body, e.g. your upper arm, but that’s a hassle and inaccurate if you measure right after a workout when your muscles are swollen.

Over time, you can compare your strength training limits to see progress. Below is an example showing my actual results.

ExerciseDec 26, 2021March 12, 2022% increaseTarget area
lbslbs
V-bar pushdown5072.545%Triceps
Chest press machine7012071%Chest
Lat pulldown machine9013044%Back
Shoulder press machine407075%Shoulders
Tricep pushdown machine11517047%Triceps
Bicep curl machine6511069%Biceps

Find Pageviews From Custom UTM Parameters in GA4

Google Analytics version 4 (GA4) is quite different than the previous version, called Universal Analytics (UA). GA4 is event-based, and the UI is quite different. If you’ve got a link with UTM parameters like

www.example.com/?utm_source=marketo&utm_medium=email&utm_name=feb23-campaign&utm_id=12345

In GA4, if you go to Reports > Engagement > Pages and screens, you will see stats like pageviews for many pages. You can then filter to just one page like a free trial page by entering the page’s path in the search field, e.g. “/free-trial/”. You can then add a secondary dimension for source and medium. What you’ll end up will be something like this

This may not include the source and medium in your UTM parameters. A better way to get the traffic report based on a specific source and medium or name is by going to Explorations.

Here, you can create a new exploration. In the left “Variables” column

  • give the exploration a name like “Feb 2023 Campaign”
  • add some dimensions like
    • Page path and screen class
    • Session campaign
    • Session source / medium
  • add some metrics like “Views” and “Sessions”

In the middle “Settings” column,

  • drag some or all dimensions from the left column to the “Rows” field
  • drag some or all metrics from the left column to the “Values” field
  • add some filters like
    • Session source / medium contains market
    • Session campaign contains “Feb 2023 Campaign”

You will then see the report on the right.

Here’s the mapping between UTM query parameter and UTM dimension in GA4.

To find the number of clicks on a link with a UTM, go to

  1. Reports > Acquisition > Traffic acquisition
  2. In the primary dimension, choose session source or session medium or session campaign
  3. In the Search field, enter a value for the session source or session medium or session campaign
  4. Choose a date range
  5. Scroll to the right and under “Event count”, choose “click”.

Learn more about GA4 traffic sources