Varnish Workspace Error

We had been having an issue with losing cookies in Varnish. Because of how Varnish works, the way to work around cookies is to store them in headers inbetween states of the request process. We were finally able to get some data out of varnishlog that looked like this.

- ReqHeader DN-Varnish-Offer-Group: 
- LostHeader DN-Varnish-Offer-Sort: price
- Error out of workspace (req)
- LostHeader DN-Varnish-Sbtab-Sorts:
- Error out of workspace (req)
- LostHeader DN-Varnish-Use-View:
- Error out of workspace (req)
- LostHeader DN-Varnish-Ux-Variant: classic_site
- Error out of workspace (req)

When you first read these errors, you will likely find the settings workspace_client and workspace_backend. Those seem like very logical settings to tweak. However, no matter how big we set them nothing helped. We graph stats coming out of Varnish using the prometheus exporter. We found the metric varnish_main_ws_backend_overflow. That made us believe even more that this was a workspace_backend limit we were hitting. It turns out, there is more to the workspace settings than just this. I read through an old issue on Github and found some folks trying to set other settings related to header size and header limits. In the end, that was our issue. We increased these settings and our overflows disappeared. 

http_req_hdr_len = 64k (default is 8k)
http_req_size = 128k (default is 32k)
http_max_hdr=256 (default is 64)

Hopefully this will help someone else that runs up against this.

Disc Golf Discs similar to Remix Discs on Amazon

Remix Creature

Remix Disc Golf is a brand of disc golf discs that I have only been able to find on Amazon. The seller on Amazon is named Disc Golf Goods. On its Amazon store page, they sell MVP, Axiom, Remix and other brands of disc golf equipment. The detailed seller information on Amazon says the "Business Name" is MVP Pro Shop, LLC. It is pretty common knowledge that these discs are manufacturered and sold by MVP. The speculation is that they are molds made for other companies (Mint, Thought Space Athletics, and possibly others) which they are selling under the Remix name on Amazon. Many of the reviews mention the discs have cosmetic defects or look like they have been used. That has led some to think these are factory seconds. The cool thing is, they cost less than any of the MVP brands or third party brands for which they are known to manufacturer discs. The discs sell from $9.95 to $12.95.

One thing people are always trying to figure out is what disc from another brand was renamed for a Remix disc. Well, it's not an exact science. Some of them could be rejected molds. So, while they may be very similar to another disc, it could be a mold that was meant for another disc that was not used for that disc. This is pure speculation based on talking to people in the know for almost 28 years of playing disc golf.

Now, there is a site that already has a feature that lets one search for similar discs. It is called Try Discs. Their recommendation engine seems to favor flight number similarities over measurements. And we all know that flight numbers are kind of made up. I decided to use the PDGA specs for approved discs to find the discs most similar to the Remix discs available on Amazon. I did not limit the search to brands that are known or believed to be manufactured by MVP. Perhaps you have a favorite disc from another brand that is similar to a Remix disc. There are more Remix discs approved by the PDGA than are on thist list. However, they are not for sale anywhere I can find. I am not claiming that any of the discs will fly like one another. I am solely comparing the measuerments has observed by the PDGA.

If you are interested in some reviews of Remix Discs, Pete Collins has some on his YouTube channel.

All values are centimeters except rim configuration. To determine similarity, diameter and inside rim diameter must to be +/- 0.5cm, height, rim depth, and rim thickness must be +/- 0.2cm (it was 0.1cm in an earlier version of the blog post), and rim configuration must be +/- 1.

For details on these specifications, see the PDGA Technical Standards document.

Brand Name Diameter Height Rim Depth Inside Rim Diameter Rim Thickness Rim Configuration
Remix Disc Golf Battleship
5 / 4.5 / 0 / 2.5
21.4 1.8 1.4 18.5 1.4 50.5
Clash Discs Cherry
5 / 5 / -1 / 1
21.4 1.7 1.4 18.5 1.4 51
Clash Discs Berry
5 / 5 / -1 / 1
21.4 1.7 1.4 18.8 1.3 50.5
Kastaplast Järn
5 / 3 / 0 / 3
21.3 1.8 1.4 18.8 1.3 51.5
Legacy Discs Sumo
4 / 2 / 0 / 4
21.3 1.7 1.3 18.7 1.3 50.25
Axiom Discs Paradox
5 / 4 / -4 / 0
21.5 1.8 1.3 18.9 1.3 50.25
Innova Champion Discs Gator
5 / 2 / 0 / 4
21.2 1.9 1.4 18.6 1.3 49.5
Innova Champion Discs Gator3
5 / 2 / 0 / 3
21.2 1.8 1.4 18.2 1.5 49.5
Discmania MD5
5 / 3 / 0 / 4
21.2 2 1.3 18.2 1.5 51.25
Lone Star Disc Artemis
4 / 4 / 0 / 2
21.1 2 1.4 18.8 1.2 50.5
Infinite Discs Ra
5 / 4 / 0 / 3
21.7 1.8 1.4 18.8 1.4 50.25
Brand Name Diameter Height Rim Depth Inside Rim Diameter Rim Thickness Rim Configuration
Remix Disc Golf Behemoth
12 / 4.5 / -1 / 3
21.2 1.8 1.2 16.6 2.3 26.5
Mint Discs Goat
12 / 4 / -1 / 3
21.2 1.7 1.2 16.6 2.3 27
Thought Space Athletics Synapse
12 / 5 / -1 / 3
21.2 1.6 1.2 16.6 2.3 26.25
Axiom Discs Time-Lapse
12 / 5 / -1 / 3
21.2 1.7 1.2 16.5 2.3 26.25
Discmania Astronaut
12 / 6 / -4 / 1
21.2 1.8 1.1 16.6 2.3 26
Prodigy Disc X4
13 / 5 / -2 / 2
21.2 1.7 1.1 16.6 2.3 27
Disc Golf Association Hypercane
13 / 4 / 0 / 4
21.2 1.6 1.2 16.7 2.2 26.5
Latitude 64 Recoil
12 / 4 / 0 / 3
21.2 1.8 1.2 16.8 2.2 26
Kastaplast Rask
14 / 3 / 0 / 4
21.2 1.6 1.1 16.8 2.2 26.5
Lone Star Disc Curl
11 / 6 / -1 / 2
21.2 1.8 1.1 16.8 2.2 26.75
MVP Disc Sports Zenith
11 / 5 / -0.5 / 2
21.2 1.7 1.1 16.8 2.2 27
Brand Name Diameter Height Rim Depth Inside Rim Diameter Rim Thickness Rim Configuration
Remix Disc Golf Creature
5 / 5 / -3 / 1
21.4 1.8 1.4 18.6 1.4 46.25
Thought Space Athletics Crux
5 / 4 / 0 / 2
21.4 2 1.4 18.5 1.4 47.25
Discmania Origin
5 / 5 / -2 / 1
21.4 1.6 1.2 18.8 1.3 46.5
Dynamic Discs Culprit
4 / 2 / 0 / 3.5
21.3 1.6 1.3 18.9 1.2 46.25
Streamline Discs Runway
5 / 4 / 0 / 3.5
21.5 1.7 1.4 18.6 1.4 47.25
MVP Disc Sports Matrix
5 / 4 / -1 / 2
21.5 1.6 1.4 18.7 1.4 46.5
MVP Disc Sports Vertex
4 / 4 / -2 / 0.5
21.5 1.9 1.3 19 1.2 46.75
MVP Disc Sports Tensor
4 / 4 / 0 / 2.5
21.5 2 1.3 19.1 1.2 46.75
Doomsday Discs Wasteland
5 / 4 / 0 / 1
21.2 2 1.2 18.6 1.3 45.5
MVP Disc Sports Detour
5 / 5 / -2 / 1
21.6 1.6 1.3 18.7 1.4 47.25
Doomsday Discs Scavenger
5 / 5 / -2 / 1
21.6 1.9 1.2 19 1.3 46.75
Brand Name Diameter Height Rim Depth Inside Rim Diameter Rim Thickness Rim Configuration
Remix Disc Golf Eldritch
3 / 3 / 0 / 1
21.2 2 1.5 18.9 1.1 55.75
Prodiscus Origo
3 / 3 / 0 / 1
21.2 1.9 1.5 19.1 1.1 56.75
Streamline Discs Stabilizer
3 / 3.5 / 0 / 3
21.2 1.8 1.4 18.8 1.1 56.25
Viking Discs Rune
2 / 4 / 0 / 0
21.2 2.1 1.6 19 1.1 55.5
Discmania Logic
3 / 3 / 0 / 1
21.2 1.9 1.3 19 1.1 55
Gateway Disc Sports Houdini
3 / 3 / 0 / 3
21.2 1.9 1.5 18.8 1.2 55.75
Gateway Disc Sports Warlock GE
2 / 3 / 0 / 1
21.2 1.9 1.5 19.2 1 56.25
Innova Champion Discs Aviar3
3 / 2 / 0 / 2
21.2 1.9 1.5 19.2 1 55.75
Prodigy Disc P Model S
3 / 5 / 0 / 2
21.2 2 1.5 19.2 1 56.25
Disc Golf Association Steady
2 / 3 / 0 / 2
21.2 2 1.4 19.3 1 56
Gateway Disc Sports Chief OS
3 / 3 / 0 / 2
21.2 2.1 1.3 19.2 1 55.75
Brand Name Diameter Height Rim Depth Inside Rim Diameter Rim Thickness Rim Configuration
Remix Disc Golf Gladius
5 / 5 / -0.5 / 1
21.4 1.9 1.4 18.5 1.4 45.75
Clash Discs Peach
4 / 5 / -2 / 1
21.4 1.9 1.3 18.6 1.4 45
Doomsday Discs Despair
5 / 4 / -1 / 1
21.4 2.1 1.4 18.8 1.3 46.25
Discraft Malta
5 / 4 / 0 / 3
21.3 1.7 1.3 18.6 1.3 45
MVP Disc Sports Uplink
5 / 5 / -3 / 0.5
21.5 1.8 1.4 18.8 1.3 45
MVP Disc Sports Vertex
4 / 4 / -2 / 0.5
21.5 1.9 1.3 19 1.2 46.75
Innova Champion Discs Spider
5 / 3 / 0 / 1
21.2 1.7 1.4 18.6 1.3 45
Doomsday Discs Wasteland
5 / 4 / 0 / 1
21.2 2 1.2 18.6 1.3 45.5
Prodiscus STARi
4 / 4 / -2 / 0
21.6 1.9 1.4 18.9 1.3 45
Doomsday Discs Scavenger
5 / 5 / -2 / 1
21.6 1.9 1.2 19 1.3 46.75
Innova Champion Discs Hydra
3 / 3 / 0 / 2
21.1 2 1.4 18.3 1.4 44.75
Brand Name Diameter Height Rim Depth Inside Rim Diameter Rim Thickness Rim Configuration
Remix Disc Golf Goliath
10.5 / 4.5 / -1 / 2.5
21.2 1.6 1.2 17 2.1 31
RPM Discs/Disc Golf Aotearoa Tara Iti
10 / 5 / 0 / 2
21.2 1.5 1.2 17 2.1 30
Thought Space Athletics Animus
11 / 5 / -1 / 2
21.2 1.6 1.2 17 2.1 30
Thought Space Athletics Mantra
9 / 6 / -2 / 1
21.2 1.7 1.2 17.1 2 32
Discraft Spectra
12 / 5 / -2 / 2
21.2 1.7 1.2 16.8 2.2 30.75
Latitude 64 Blitz
12 / 3 / 0 / 4
21.2 1.6 1.2 16.8 2.2 30.5
Lone Star Disc Chupacabra
9 / 3 / 0 / 4
21.2 1.6 1.2 17.2 2 30.5
Mint Discs Phoenix
9 / 3 / 0 / 4
21.2 1.5 1.2 17.2 2 30.25
Streamline Discs Trace
11 / 5 / -1 / 2
21.2 1.7 1.2 16.8 2.2 31.25
Dynamic Discs Sockibomb Felon
9 / 3 / 0.5 / 4
21.2 1.6 1.1 17.1 2 31.5
Discmania DD
11 / 6 / -3 / 2
21.2 1.7 1.1 16.8 2.2 30
Brand Name Diameter Height Rim Depth Inside Rim Diameter Rim Thickness Rim Configuration
Remix Disc Golf Haymaker
9 / 4 / 0 / 4
21.2 1.8 1.2 17.2 2 31.5
Gateway Disc Sports Ninja
10 / 5 / -1 / 2
21.2 1.9 1.2 17.2 2 31.75
Lone Star Disc Chupacabra
9 / 3 / 0 / 4
21.2 1.6 1.2 17.2 2 30.5
Gateway Disc Sports Diablo
9 / 5 / 0 / 2
21.2 1.7 1.2 17.1 2 32.5
Thought Space Athletics Mantra
9 / 6 / -2 / 1
21.2 1.7 1.2 17.1 2 32
Prodigy Disc FX-4
9 / 5 / -2 / 1
21.2 1.8 1.2 17.3 2 32.25
Dynamic Discs Felon
9 / 3 / -0.5 / 4
21.2 1.8 1.1 17.2 2 31.5
Prodigy Disc Feedback
9 / 5 / -1 / 3
21.2 1.7 1.1 17.2 2 31
Dynamic Discs Sockibomb Felon
9 / 3 / 0.5 / 4
21.2 1.6 1.1 17.1 2 31.5
Latitude 64 Culverin
9 / 5 / -0.5 / 3
21.2 2 1.1 17 2 31.25
Thought Space Athletics Coalesce
9 / 5 / 0 / 3
21.2 1.9 1.2 17.4 1.9 32.5
Brand Name Diameter Height Rim Depth Inside Rim Diameter Rim Thickness Rim Configuration
Remix Disc Golf Ronin
8 / 4.5 / 0 / 2
21.3 1.9 1.2 17.4 1.9 31.5
Prodigy Disc H1
9 / 5 / -2 / 2
21.3 1.8 1.2 17.4 1.9 31.75
Lone Star Disc Dos X
8 / 4 / -1 / 2
21.3 1.9 1.2 17.3 2 32.25
Prodigy Disc H3 V2
11 / 5 / -1 / 2
21.3 1.8 1.2 17.3 2 30.75
Clash Discs Soda
7 / 5 / -2 / 2
21.4 2 1.2 17.8 1.8 31.5
Thought Space Athletics Coalesce
9 / 5 / 0 / 3
21.2 1.9 1.2 17.4 1.9 32.5
Latitude 64 Honor
9 / 5 / 0 / 2.5
21.2 1.8 1.1 17.4 1.9 31.75
Yikun Discs Hu
9 / 5 / -2 / 2
21.2 1.8 1.1 17.4 1.9 31.75
Discmania CD1
9 / 5 / -1 / 2
21.2 1.7 1.1 17.3 1.9 31.25
Discraft Tracker
8 / 4 / -1 / 3
21.2 1.7 1.2 17.7 1.8 32.5
Discmania Instinct
7 / 5 / 0 / 2
21.2 1.9 1.1 17.6 1.8 32.25
Brand Name Diameter Height Rim Depth Inside Rim Diameter Rim Thickness Rim Configuration
Remix Disc Golf Rumble
10 / 5 / -1 / 2
21.2 1.7 1.2 17.1 2 33.75
Gateway Disc Sports Blade V2
9 / 5 / 0 / 3
21.2 1.7 1.2 17.2 2 34
Legacy Discs Vengeance
10 / 5 / 0 / 2
21.2 1.7 1.2 17.2 2 33
Prodiscus Titan
8 / 3 / 0 / 2
21.2 1.6 1.2 17.3 1.9 32.75
MVP Disc Sports Terra
8 / 5 / 0 / 3
21.2 1.8 1.2 17.4 1.9 32.75
Prodigy Disc F Model OS+
10 / 5 / 2 / 4
21.2 1.7 1.1 17.1 2.1 34.25
Streamline Discs Shift
11 / 5 / -2 / 2
21.2 1.5 1.1 17.1 2.1 32.75
Dynamic Discs Thief
8 / 5 / -1.5 / 2
21.2 1.8 1.1 17.3 1.9 34.25
Mint Discs Jackalope
8 / 5 / -2 / 1
21.2 1.5 1.1 17.3 1.9 32.75
Infinite Discs Aztec
10 / 5 / -1 / 2
21.2 1.5 1.1 16.9 2.1 33
Latitude 64 Spark
7 / 4 / -0.5 / 2
21.2 1.5 1.1 17.4 1.9 34
Brand Name Diameter Height Rim Depth Inside Rim Diameter Rim Thickness Rim Configuration
Remix Disc Golf Spartan
9 / 6 / -2 / 1
21.2 1.6 1.2 17 2.1 32.5
Infinite Discs Aztec
10 / 5 / -1 / 2
21.2 1.5 1.1 16.9 2.1 33
Streamline Discs Shift
11 / 5 / -2 / 2
21.2 1.5 1.1 17.1 2.1 32.75
Gateway Disc Sports Diablo
9 / 5 / 0 / 2
21.2 1.7 1.2 17.1 2 32.5
Thought Space Athletics Mantra
9 / 6 / -2 / 1
21.2 1.7 1.2 17.1 2 32
Legacy Discs Vengeance
10 / 5 / 0 / 2
21.2 1.7 1.2 17.2 2 33
Prodigy Disc FX-4
9 / 5 / -2 / 1
21.2 1.8 1.2 17.3 2 32.25
Dynamic Discs Sockibomb Felon
9 / 3 / 0.5 / 4
21.2 1.6 1.1 17.1 2 31.5
Dynamic Discs Felon
9 / 3 / -0.5 / 4
21.2 1.8 1.1 17.2 2 31.5
Westside Golf Discs Sorcerer
13 / 5 / -0.5 / 3
21.2 1.6 1.1 16.7 2.3 32.25
Innova Champion Discs Mystere
11 / 6 / -2 / 2
21.1 1.6 1.1 16.9 2.1 31.5
Brand Name Diameter Height Rim Depth Inside Rim Diameter Rim Thickness Rim Configuration
Remix Disc Golf Torpedo
5 / 5 / 0 / 1
21.4 1.6 1.4 18.5 1.4 42.5
Lone Star Disc Middy
5 / 5 / 0 / 3
21.4 1.6 1.2 18.8 1.3 42.75
Streamline Discs Echo
5 / 5 / -1.5 / 1
21.4 1.6 1.3 18.5 1.5 42
Legacy Discs Badger
6 / 3 / 0 / 3
21.4 1.6 1.3 18.3 1.5 42
Westside Golf Discs Anvil
4 / 2 / 0 / 4
21.3 1.8 1.2 18.3 1.5 41.75
Thought Space Athletics Pathfinder
5 / 5 / 0 / 1
21.5 1.7 1.3 18.6 1.4 43
Westside Golf Discs Tursas VIP Air
5 / 5 / -2 / 1
21.6 1.7 1.3 18.8 1.4 42.5
Westside Golf Discs Tursas
5 / 5 / -2 / 1
21.7 1.7 1.3 18.9 1.4 42.5
Latitude 64 Anchor
5 / 4 / 0 / 3
21.7 1.8 1.5 18.9 1.4 43.25
Latitude 64 Fuji
4 / 4 / 0 / 2
21.7 1.8 1.2 18.9 1.3 42.75
Dynamic Discs EMAC Truth
5 / 5 / 0 / 2
21.7 1.8 1.2 18.7 1.5 42.25
Brand Name Diameter Height Rim Depth Inside Rim Diameter Rim Thickness Rim Configuration
Remix Disc Golf Troll
7.5 / 4.5 / 0 / 2
21.2 1.8 1.2 17.6 1.8 37
Thought Space Athletics Votum
8 / 5 / 0 / 3
21.2 1.7 1.2 17.5 1.8 36.25
Discmania FD1
7 / 4 / 0 / 2
21.2 1.7 1.1 17.6 1.8 36.25
Dynamic Discs Vandal
9 / 5 / -1.5 / 2
21.2 1.7 1.1 17.4 1.9 36.25
Latitude 64 Fury
9 / 6 / -2 / 2
21.2 1.8 1.1 17.4 1.9 36.75
Streamline Discs Ascend
6 / 5 / -3 / 0.5
21.2 1.8 1.2 17.8 1.7 38
Innova Champion Discs Kite
5 / 6 / -3 / 1
21.2 1.9 1.3 17.9 1.6 36.25
Infinite Discs Exodus
7 / 5 / -1 / 2
21.1 1.8 1.1 17.5 1.8 36.25
Prodiscus Talisman
9 / 4 / 0 / 2
21.1 1.7 1.2 17.3 1.9 37.75
Innova Champion Discs Savant
9 / 5 / -1 / 2
21.1 1.6 1.1 17.2 1.9 36.5
Lone Star Disc The Dome
8 / 6 / -3 / 1
21.1 1.8 1.1 17.2 1.9 36

How I got Disc Golf Network Pro for FREE for 2024

Do you plan to go to a DGPT event this year? Are you a PDGA member? Then it could be worth it to buy the Disc Golf Network yearly plan.

Disc Golf Network (aka DGN) (the media arm of the Disc Golf Pro Tour) (aka DGPT), announced their new pricing tiers for 2024 earlier this month. It was met with some mixed reviews. Some users of the service had issues using it the first week. Most of those appear to be due to users needing to update the app on their devices or using older streaming devices that do not support the new 60fps stream. They have updated their upgrade guide. I experienced this on one of my Roku devices. I was not surprised to be honest. Many of the Roku apps we use on that device are laggy and crash from time to time. It is over 10 years old. The fact that it has kept working at all is a credit to Roku.

As for the pricing for DGN, there are three tiers: Basic, Standard, and Pro. See the link above for the differences. The pricing ranges from $5.99/mo to $19.99/mo for non-PDGA members. While PDGA members can get Basic for free, Standard for $5.99/mo, and Pro for $12.99/mo. There are also yearly options. Basic for $59.99, Standard for $129.99, and Pro for $239.99 for non-PDGA members. And for PDGA members, Standard for $69.99 and Pro for $139.99. Since Basic is free, there is no yearly option for PDGA members of course. Most people I know that want to consume live disc professional disc golf are PDGA members. While some say you have to factor in the $50 annual PDGA membership cost along with the discounted DGN price, that does not apply to me. I would be renewing my PDGA membership either way. So, I will only be speaking about how and why I chose the option I did based on the discounted PDGA pricing.

The first question I had to ask is what do I want to pay monthly or go ahead and pay for the whole year? The Standard plan annual cost only saves you $2 for the year. Not a compeling reason to do it in my opinion. The annual cost for Pro actually saves more than the cost of a month, $139.99 one time compared to $12.99/mo over 12 months totaling $155.88. There are some ways to save if you change your plan for certain months for certain events or remember to cancel after the DGPT Finale in October. But, let's be real. I won't remember to do that. Most people won't remember to do that. That is why the subscription model is so popular in the USA. That is how gyms stay in business to be honest. If you are the kind of person that likes to manage subscriptions that way, go for it. If you micro manage it completely and only pay for February through October and upgrade the months of the USDGC and European Open, you could get all of the coverage for as low as $88.89 for the year as a PDGA member. I think I did that math right. You are probably saying "Hey, your headline says you are getting it free for the whole year! What gives?" Yes, let me get to that.

Here is why I opted for the full year, Pro plan. It’s $139.99 for the year. The kicker for me is that any yearly plan includes two free general adminssion (aka GA) weekend passes to a Disc Golf Pro Tour event as well as 10% off any other DGPT ticket purchases. As a family, we had already booked an AirBnB for Nashville in April to go watch the Music City Open before this announcement was made. My two sons and I are going for all three days. And two other family members will be joining us for Sunday. I had planned to get the weekend VIP pass for myself. So, altogether, our tickets to the Music City Open were going to cost around $350. However, with the yearly DGN option, I get the GA passes for free. And I get a 10% discount on the other tickets. Those ended up costing me around $210 after the discount. So, my savings on tickets (tickets I had already planned to buy before I knew there was a discount available) is around $140. That is the cost of the yearly plan. If you include all of the decimals in all of the math, I technically am spending 17 cents more on the DGN subscription than I am saving on tickets. Would that make a better headline?

Ticket Quantity Regular Price DGN Discounted Price
3-Day General Admission 2 $116.88 ($58.44/ea) FREE
Sunday General Admission 2 $71 ($35.50/ea) $64.12 ($32.06/ea)
3-Day VIP 1 $161.68 $145.62
Total 5 $349.56 $209.74
Savings $139.82

Having said all that, if you are not really into watching live disc golf and don’t follow the pro scene on social media, the best way to consume the pro tour is next day, post produced coverage on the JomezPro YouTube channel. In the past, their coverage only included the lead group each round. This year, JomezPro are doing more comprehensive coverage of the event as a whole. I am sure this is due in part to having multiple winners last season that were not in the lead group in the final round (aka chase card champions). This meant that the JomezPro coverage didn’t include footage (or not much at least) of the actual winner of the event. They were purchased or merged with Disc Golf Network early last year. However, other media companies covered the second and third groups. This year, they didn’t partner with those media companies in the same way which allows JomezPro to use the footage from all groups. Listening to Jeff Spring on the Staggered Stance podcast, it sounds like they will still be partnering with some of those media companies like Ace Run Pro for some things this year as well.

Update

I forgot to mention that I had a hard time finding information about how to get my free tickets and discounts. After some digging, I found in the DGN support pages. You have to fill out a form which triggers an email which has discount coupon codes and a link to another form you have to fill out to get your free DGPT tickets. So, if you get an annual subscription, be sure and fill out this form to at least get your 20% discount codes for the DGPT Pro Shop and JomezPro Shop. JomezPro has made some cool stamps in the past that I have rarely bought unless they had a sale going. Having a 20% discount code will make me consider them more often when ordering discs online.

This post was not paid for or done as a favor for the DGPT. I am just a disc golf fan that wanted to share my experience.

So, I had a heart attack and bypass surgery

Hey y’all. So, I had a heart attack and bypass surgery. Here is the full story.

Friday (3/31) and Saturday (4/1) nights I had chest pain that I thought was acid reflux. On Sunday morning, the pain returned. I checked my blood pressure. It was 170/103. I took some anxiety meds, gas x, and aspirin. An hour later it was still high.

So we went to the ER. Blood work showed troponin in my blood. “When heart muscles become damaged, troponin is sent into the bloodstream. As heart damage increases, greater amounts of troponin are released in the blood.” I was then admitted for observation and further testing.

On Monday (4/3) morning they performed an echocardiogram. There were some abnormalities. They then performed a heart catheter. I had 90% blockage in at least one artery. And blockages in several others. I was immediately transferred to UAB hospital.

Later that day I met with a surgeon. After discussing it with him, we decided to do bypass surgery. The long term success rate with this surgery at my age is better than the alternatives. Surgery was booked for Thursday, April 6.

On Tuesday (4/4) and Wednesday (4/5) I just hung out at the hospital. I could have another heart attack at any moment. Going home was not an option. Friends and family visited. I had some hard conversations with family about what to do “just in case”. Those conversations don’t phase me. And the family I spoke to were very practical about it as well.

Early Thursday morning, before dawn, I broke down a little bit. The reality that I could not wake up was hitting me. I knew it was not likely. These procedures are done every day. My doctor would probably do several that day alone. Still, it could have happened. It’s normal for me to have these emotional outbursts alone. The first time I remember it happening was with my great grandmothers death when I was 15. It’s been the same with all my other grandparents’ deaths as well. It’s just how I deal with it.

Then it was time to go. The family that was there followed us down to the waiting room. Once I was in pre-op and settled they said I could have one person come back. They let two coke back. The nurse said we seemed like solid people. I don’t remember a lot about that time. I do remember Deedra deciding to read my chart. Haha. The staff walking by was confused. Then I was off. While still rolling me in, I started to feel woozy. And then black.

I wake up very confused with some voices I know and others I don’t know. I understand their instructions but don’t know how to follow them. I need to breath. Ok. There is something in my mouth. Oh it’s the ventilator of course. They can’t remove it until I breath. There are two people I know there. My ex wife, and mother of my six children, Robin, coaching me on what to do. Good I need that right now. And Amy, my platonic life partner, speaking to me softly and encouraging me to breath. Man, I really need that approach too. If you had asked me what two people I would want in that moment, I would probably not have chosen either of them. And yet, they were the perfect combination at that time. Some (I assume) nurse said “good job” and out came the ventilator. Based on when I knew I went into the OR and how long the surgery took, I would say this is around 2pm. People say they visited with me in recovery. I believe them. Still, I really don’t recall much until 5AM on Friday morning.

Friday was confusing. It’s like my mind was still trying to figure out what happened to my body.

Between Friday and Tuesday (4/11) I had good times and bad times. I eventually got to go home. That is where I am now. My strength has slowly been recovering. The last device attached to my body came off yesterday. It will be several weeks of very limited activity. Mostly I just can’t lift things or drive. Slowly that will be allowed more and more. Then once all restrictions are removed, I can start building up my strength again.

Who am I to call anyone a racist?

Recently, on Facebook, I was asked "Who are you to call anyone a racist?". To be clear, I did not call anyone a racist. But, really, let's say I did call someone a racist? Who am I to call anyone a racist? After all, I am a 47 year old, white, middle class man. I am, quite possibly, in the absolute sweet spot of my life for white privilege.

 

As a child, I heard older family members say racist things. Luckily, my parents made it clear to me that they were wrong and I should ignore them. So I have for 40+ years. Some of those racist things were said about my childhood best friend, who is black. Were they nasty, ugly, hateful remarks? No. They didn't use the "N" word. It was subtle things that made me question if I should have a best friend that is black. They found it confusing. They found it odd. It was clear they did not approve.

 

I was fortunate to have lived in a very diverse neighborhood in Huntsville, AL as a child. My next door neighbor was two years older than me. He was my best friend. I don't know if I was his best friend but he was definitely mine. And like I said, he is black. His father pulled the first tooth I lost. I spent so much time at his house as a child and he spent time at mine. We liked his house better because his parents had converted their two car garage into an awesome den/music hall. I was young and innocent as they say. I didn't know any different. I am so glad that was the case. I have not seen him in years as I moved away from Huntsville when I was eleven years old. A year or so ago, I did find his mother and sisters on Facebook and was able to reconnect with them online. He has a career in the Air Force. I am very proud to have called, and still consider, him my friend.

 

After living in Tuscumbia, AL for four years where racial topics were basically not discussed despite there being a neighborhood named Richman Hills where the road leading into it was named White City Drive, I moved to a suburb of Birmingham, AL. I have lived in the Birmingham area, including some years in the city proper, for all but two years of my life since I was 15 years old. This is the city where police turned fire hoses and dogs on protesters during the Civil Rights movement.

 

I found things in Birmingham different than they were in Huntsville. The Birmingham area was and still is highly segregated. It's not by law or force. It's mostly white flight which is itself a form of socioeconomic racism. It was a strange thing for me to realize as I grew older. I found the history of racial injustice to be just below the surface in Birmingham. I did not witness any overtly racist behavior in public. But, it was there, kind of like that subtle language my elders used when I was young. There was a lot of use of the words like "those people" or "they" when referring to black people. Again, I ignored the people saying these things and was silent.

 

Shortly after President Obama was elected, I was in a barber shop. It was not a local place. I travel for work between Birmingham and Huntsville very regularly. A small town between here and there had a barber shop. It was very convenient for me to stop in there on my way to Huntsville. I had been in there four or five times with little to no issues. Then one day, I am getting my haircut and a customer comes in. He and the barber seemed to know each other socially. They did not seem to be great friends, but they knew each other's names. At some point, the customer says, "You know what Lincoln, Kennedy, and Obama have in common?" I could think of nothing. The barber said "I don't know." The customer says "Nothing yet." I took a minute or so for it to sink in. He was saying that Obama would be assassinated. I was stunned. That was the most overt racism I had faced in years. The barber didn't seem too happy about it, but he didn't say anything about it either. I never went back to that barbershop. Now though, I regret that I ignored it and was silent.

 

During President Obama’s tenure, I saw posts on Facebook from friends and family, people I shared a meal with, that blamed him for all their problems. I unfollowed some of them. I ignored others. And, I was silent.

 

In the last three and a half years, I have seen many of those same people post things supporting President Trump and his agenda to divide this country. I unfollowed some of them. I ignored others. And, I was silent.

 

I have done my best to be a good example to my children the same way my parents were to me. The other day, I told my youngest child “I don’t think I need to say this, but I am going to.  Racism is wrong.” His response was “Of course Dad, I know that.” I wanted to be sure I said it out loud though.

 

I am done being silent. My silence has not helped the world.  Who am I to call anyone a racist? I am a 47 year old, white, middle class man. I will not ignore them and I will not be silent any longer.

Masks in Design and How They Relate to HTML/CSS

I have always struggled understanding the use of masks in design tools like Photoshop, Illustrator, and Sketch. I recently had to work on translating some creative from Sketch into a responsive design. I realized that a mask in these tools is like a containing element in HTML with overflow hidden and the contents being absolutely positioned.

This is not something you would want to do a lot of as there is a lot of the image being loaded that not being shown. But, it is useful in responsive designs.

See the Pen How masks in design tools translate to HTML by Brian Moon (@brianlmoon) on CodePen.

New Responsive Design

I have not blogged in over a year. Shame on me. I think part of the reason was because my blog template had become quite dated. I tweaked it a bit to make it semi-responsive a while back. But, I have never been happy with it.

So, I decided to build a new, mobile first template from scratch and use lots of modern (relative to my old template) CSS and responsive web design techniques. Things like rem for sizing things, flexbox, text-shadow, and background-size (for the header image). I know it is nothing ground-breaking. And, at the same time, it was nice to shed all the old compatibility layers and work with the code without worrying about fall backs.

For the font, I chose the super-popular Open Sans after reading "Serif or Sans Serif?" by Danielle Stone. I looked at many sans serif fonts. Open Sans just looked the cleanest to me.

I opted to go with an easy to read black text on white background after reading "How the Web Became Unreadable" by Kevin Marks. One great nugget in that article is where Kevin quotes Adam Schwartz:
A color is a color isn’t a color……not to computers…and not to the human eye.
I found this very interesting. I often look at my "black" SUV and think "my car looks kind of brown today".

With the help of the love of my life, Deedra, I found the header graphic, bought it from iStockPhoto and then played with the hue a bit to get it just right.

While testing, I found myself reading my old blog posts. It felt good. I really need to do this more.

Don't say ASAP when you really mean DEADIN

I have found that people tend to use the acronym ASAP incorrectly. ASAP stands for As Soon As Possible. The most important part of that phrase to me is As Possible. Sometimes, it's only possible to get something done 3 weeks from now due to other priorities. Or, to do it correct, it will take hours or days. However, some people don't seem to get this concept. Here are a couple of examples I found on the web.

The Problem with ASAP

What ‘ASAP’ Really Means

ASAP is toxic, avoid it As Soon As Possible

ASAP

It's not the fault of those writers. The world in general seems to be confused on this. Not everyone is confused though. I found ASAP — What It REALLY Means which does seem to get the real meaning.

At DealNews, we struggled with the ambiguity surrounding this acronym. To resolve this, we coined our own own phrase and acronym to represent what some people seem to think ASAP means.

DEADIN:
Drop
Everything
And
Do
It
Now

We use this when something needs to be done right now. It can't wait. The person being asked to DEADIN a task needs to literally drop what they are doing and do this instead. This is a much clearer term than ASAP.

With this new acronym in your quiver, you can better determine the importance of a task. Now, when someone asks you to do something ASAP, you can ask "Is next Tuesday OK?" Or you can tell them it will take 10 hours to do it right. If they are okay with those answers, they really did mean ASAP. If they are not, you can ask them if you should "Drop Everything And Do It Now". (Pro tip: It still make 10 hours to to right. Don't compromise the quality of your work.)

Apple Says My Screen Is Third Party

I have always had the utmost respect for Apple. Even before I used Macs and before the iPhone came out, I knew they were a top notch company.

I have had five iPhones. I have had 6 or 7 MacBook Pros. My kids have Macs. My kids have iPhones. My parents use iPads. I think a lot of Apple products and service... until today.

We took my daughter's hand me down iPhone 5 in to have the ear piece and top button fixed. It's been in the family the whole time. It was never owned by anyone other than family. Last year, I took it in for the Apple Store Battery Replacement Program. That is the last time anyone had it open. In fact, that may have been the last time it was out of its case. More on this later.

After we dropped off the phone today, we were told it was going to be an hour. No problem, we could kill some time. We came back an hour later and the person brought us the phone out and tells us that they refused to work on it because the screen is a 3rd party part. Whoa! What? I tell her that the only place it was ever worked on was in that exact store. She goes to get a manager. I thought, OK, the Apple customer service I know and love is about to kick in. They are going to realize their mistake and this will all be good. Or, even if they still think it's a 3rd party screen, he will come up with some resolution for the problem. Um, no.

He says the same thing (almost verbatim) to me that the previous person said. I again tell him it has only been opened by them. He offers to take it to the back and have a technician open it up again. He was not really gone long enough for that. He comes back, points at some things on the screen and tells me that is how they know it's a 3rd party part. I again, tell him that only the Apple Store has had it open. His response is a carefully crafted piece of technicality that can only come from lawyers and businessmen. It was along the lines of "At some point, this screen has been replaced with a 3rd party screen. I am not saying you are lying. I am not claiming to know how it was replaced. I am only stating that this is a 3rd party screen." What?

So, OK, what now? I mean, it wasn't under warranty. I did not expect to get a new free phone. I was going to pay to have it fixed. Nope. They won't touch it with a ten foot pole. It has a 3rd party part on it. He claims, that because they base their repair fees on being able to refurbish and reuse the parts they pull off of the phone (the phone I own and paid for by the way), they can't offer to repair a phone with parts they can't refurbish. I can't even pay full price, whatever that is. He never gave me a price to pay for a new screen with no discounts.

At this point, I realized I needed to leave. I was so furious. I was furious it was happening. I was furious that the manager had no solution for me. I was furious that he was speaking in legalese.

Just to be clear, I could buy my daughter a new iPhone 6. I am not trying to get something for nothing. I just wanted the phone to work again. One of the things I love about Apple products is how well they hold up. Sure, you have to have some work done on them sometimes. Batteries go bad. Buttons quit working. But, let's be real. My daughter uses this thing for hours a day. I have the data bill to prove it. So, I like that I can have an Apple product repaired when it breaks and it gets a longer life. The alternative is to throw it away.

How did I end up here? I can only come up with one scenario. And the thought that this is what happened upsets me even more. When we took it for the battery replacement last year, they kept it longer than their initial estimate. And the store was dead that day. When they brought it out, the case would not fit on the bottom of the phone. It was like the screen was not on all the way. The person took it back to the back again. They came out later and it seemed to work fine. And I was fine with all of this because it's Apple. I trust(ed) Apple. But, what if, they broke the screen? What if the tech that broke it was used a screen from some returned phone that did have a third party part and no one caught it? Or what if, Apple was knowingly using third party parts?

If I had not just had the battery replaced last year, I would think maybe there was some shenanigans in the shipping when the phone was new. We bought this phone brand new when the iPhone 5 came out. It would not come as a surprise if some devices had been intercepted and taken apart along the shipping lines. Or even in production. But, we just had it serviced at the Apple Store last year. They had no problem with the screen then other than the one they caused when they had to put it back together a second time.

This all sounds too far fetched right? Sadly, there seems to be a trend of Apple denying service to people. All of these people can't be lying. They can't all be out to get one over on Apple.



While waiting for our appointment, I overheard an Apple Genius telling a woman she "may" have had water damage. She didn't tell her she did. She did not claim the woman was lying. She thought she "may" have water damage. I don't know if she did or not. What struck me was the way she told her she "thought it could be" water damage. She told her she had seen lots of bad screens, but none of them (really? not one single screen?) had vertical lines in it like this. It's like she was setting her up to come back later and say "Darn, the tech says it is water damage." Sadly, I find myself doubting that conversation now. It makes me want to take a phone in with horizontal lines and see if I get the same story.

Of course, I know what many, many people will say to this. You will say that if I am really this upset, I should not buy anymore Apple products. And you are right. That is the American way. The free market is the way to get to companies. The thing is, if I bought a Samsung Galaxy, where would I get it fixed? Would my experience be any better? There is not Samsung store. There are no Authorized Samsung repair facilities. So, what would that get me? A disposable phone? Maybe that is what Apple wants. Maybe that is their goal. Deny service to people in hopes it will lead to more sales and less long term use of their devices.

And you know what makes this all even more crappy? One of the reasons he says he knows it is a third party screen is that the home button is lose. It wasn't lose when we brought it in! I was using the phone myself to make sure a back up was done just before we handed it over to the Apple Store. They did that when they opened the screen and decided it was a third pary part. So, now, my daughter's phone not only has no working ear piece and a top button that works only some of the time. Now, her home button spins around. Sigh.

Using socket_connect with a timeout

TL;DR

I was having trouble with socket connections timing out reliably. Sometimes, my timeout would be reached. Other times, the connect would fail after three to six seconds. I finally figured out it had to do with trying to connect to a routable, non-localhost address. This function is what I finally ended up with that reliably connects to a working server, fails quickly for a server that has an address/port that is not reachable and will reach the timeout for routable addresses that are not up.

I have put a version of my final function into a Gist on Github. I hope someone finds it useful.

Full Story

So, it seems that when you try and connect to an IP that is routable on the network, but not answering, the TCP stack has some built in timeouts that are not obvious. This differs from trying to connect to an IP address that is up, but not listening on a given port. We took a Gearman server down for maintenance and I noticed our warning logs were showing a 3 to 7 second delay between the attempt to queue jobs and the warning log. The timeout we had set was only 100ms. So, this seemed odd.

After a lot of messing around, a coworker pointed out that in production, the failures were happening for an IP that was routable on the network, but that had no host listening on the IP. I had been using localhost and some foreign port for my "failed" server. After using an IP that was local to our LAN but had no host listening on the IP, I was able to recreate it on a dev server. I figured out that if you set the send and receive timeouts really low before calling connect, you can loop while calling connect. You check the error state and timeout. As long as the error is an acceptable one and the timeout is not reached, keep trying until it connects. It works like a charm.

I found several similar examples to this on the web. However, none of them mixed all these techniques.

You can simply set the send and receive timeouts to your actual timeout and it will return quicker. However, the timeouts apply to the packets. And there are retry rules in place. So, I found that a 100ms timeout for each send and receive would wind up taking 500ms or so to actually fail. This was not what I wanted. I wanted more control. So, I set a 100 microsecond timeout during connect. This makes socket_connect return quickly. As long as the socket error is 115 (in progress) or 114 (already trying), we keep calling it. Unless of course our timeout is reached. Then we fail.

It works really well. Should help for doing server maintenance on our Gearman servers.