Tableau Error After Upgrading to 2023.3

I started upgrading our Tableau servers to 2023.3 this week. Several dashboards no longer rendered after the upgrade — throwing an error “TableauException: Incorrect data type real, getting expected integer type.” … resetting or not resetting the view did not help.

This is evidently a known issue (although the documentation prior to my reporting the issue seemed to go out of its way to say it is just the cloud platform being impacted)

https://issues.salesforce.com/issue/a028c00000iwtkXAAQ/~
https://kb.tableau.com/articles/Issue/error-incorrect-data-type-real-getting-expected-integer-type-occurs-intermittently-during-view-rendering

Both the server and desktop client are impacted — and, unlike their documentation that says it is intermittent? Not all workbooks are impacted, but the ones that are? A broken workbook is broken and will not render for anyone, anywhere, any time.

There is a workaround:

Server:
tsm configuration set -k features.EnableLogicalQueryBatchProcessor -v false
tsm pending-changes apply

Desktop:
“\Program Files\Tableau\Tableau 2023.3\bin\tableau.exe” -DOverride=EnableLogicalQueryBatchProcessor:off

Azure DevOps Maven Feed — Deleted Package

Someone deleted one of the packages from the Azure DevOps Maven feed … figured it would be easy enough to just re-publish the package. And they got an error:

409 Conflict – The version 1.2.3 of package.example.com has been deleted. It cannot be restored or pushed. (DevOps Activity ID: E7E4DEB1551D) -> [Help 1]

There’s some not-outlandish logic behind it because they don’t want half of the people to have this version 1.2.3 and the other half to get that version 1.2.3 … if it’s your code, just make it version 1.2.4. Unfortunately, this logic doesn’t hold up well when you’re publishing someone else’s package. Not like I can say “oops, we’ll use 23.13 now”. But you can restore deleted packages — from the feed, go into the recycle bin

Check off the packages that were deleted in error & restore them

 

ISC Bind 9.18 and Windows DNS

After upgrading all of our Linux hosts to Fedora 39, we are running ISC bind 9.18.21 … and it seems the ISC folks are finally done with Microsoft’s “kinda sorta RFC compliance”. Instead of just working around Windows DNS servers having some quirks … they now fail to AXFR the domain.

Fortunately, you can tell bind to stop doing edns ‘stuff‘ by adding a server{} section to named.conf — this gives the server some instructions on how to communicate with the listed server. When bind is no longer trying to do edns “stuff”, Windows doesn’t have an opportunity to provide a bad response, so the AXFR doesn’t fail.

Samba – Address family not supported by protocol

After upgrading to Fedora 39, we started having problems with Samba falling over on startup. The server has IPv6 disabled, and (evidently) something is not happy about that. I guess we could enable IPv6, but we don’t really need it.

Adding the following to lines to the GLOBAL section of the smb.conf file and restarting samba sorted it:

bind interfaces only = yes
interfaces = lo eth0

 

Feb 11 06:26:01 systemd[1]: Started smb.service – Samba SMB Daemon.
Feb 11 06:26:01 smbd[1109]: [2024/02/11 06:26:01.285076, 0] ../../source3/smbd/server.c:1091(smbd_open_one_socket)
Feb 11 06:26:01 smbd[1109]: smbd_open_one_socket: open_socket_in failed: Address family not supported by protocol
Feb 11 06:26:01 smbd[1109]: [2024/02/11 06:26:01.290022, 0] ../../source3/smbd/server.c:1091(smbd_open_one_socket)
Feb 11 06:26:01 smbd[1109]: smbd_open_one_socket: open_socket_in failed: Address family not supported by protocol
Feb 11 08:01:43 systemd[1]: Stopping smb.service – Samba SMB Daemon…
Feb 11 08:01:43 systemd[1]: smb.service: Deactivated successfully.
Feb 11 08:01:43 systemd[1]: Stopped smb.service – Samba SMB Daemon.

Python: Listing XML tags

I was having a lot of trouble using find/findall when parsing an XML document — turns out the namespace prefixed the tag name … so I needed to find {http://maven.apache.org/POM/4.0.0}groupId instead of just groupId

How do you figure that out? Quickest way, for me, was just to print out all of the tag names.

from lxml import etree
# Load POM XML into tree
tree = etree.parse( strXMLFile )

# # List all element names in XML document
for element in tree.iter():
     print(element.tag)

AI Personas

I’ve seen people have a bit of fun with AI personas — pre-prompts that say “be a pirate” or something similarly silly, but you can use the personas to gear answers toward yourself as the target audience too — deeply technical or “explain it like I’m five”.

Although the AI takes “like I am 5” a little too literally — don’t need smart little elves or castles.

The technical pre-prompt, though, avoids getting high level basic facts that you already know.

Tangzhong Chocolate Chip Cookies

Ingredients:

  • 2 cups (426g) light brown sugar, packed
  • 2 teaspoons table salt
  • 16 tablespoons (226g) unsalted butter, cut into 1″ pieces
  • 1/2 cup (113g) milk, whole preferred
  • 2 3/4 cups (330g) flour
  • 2 large eggs, cold from the refrigerator
  • 1 tablespoon vanilla extract
  • 1 3/4 teaspoons baking powder
  • 1/4 teaspoon baking soda
  • 2 cups (340g) semi-sweet chocolate chips
  • In a large bowl, combine the brown sugar and salt. Set aside.
  • In a saucepan over medium-high heat, melt the butter. After several minutes, the butter will sizzle and may spatter. Continue to cook the butter, swirling the pan regularly, for about 5 to 7 minutes, until it’s a dark golden brown color and brown bits start collecting at the bottom of the pan; the butter will have stopped sizzling and may also have a layer of foam on the surface.

  • Once the butter is browned, immediately pour it over the sugar mixture (be sure to scrape out the brown bits at the bottom) and whisk vigorously to combine; this helps dissolve the sugar slightly and creates the shiny surface of the baked cookies. (The mixture will stay lumpy and won’t become smooth at this point.) Set the empty saucepan aside to cool slightly.
  • In the same saucepan used to brown the butter, combine the milk with 3 tablespoons (23g) of the bread flour and whisk until no lumps remain.
  • Place the saucepan over low heat and cook the mixture, stirring regularly with a whisk and then a flexible spatula, until it’s thickened, paste-like, and starts to come together into one mass, about 2 to 3 minutes.
  • Remove from the heat and transfer directly to the bowl with the butter and sugar. Whisk until mostly smooth; some lumps are OK.

  • Add the eggs and vanilla and continue whisking until smooth.

  • Weigh or measure the remaining 2 1/2 cups plus 1 tablespoon (307g) bread flour by gently spooning it into a cup, then sweeping off any excess. Add the bread flour to the bowl with the butter and sugar, then add the baking powder and baking soda. Using a whisk or flexible spatula, stir until well combined and no dry spots remain.
  • Place the bowl, uncovered, in the refrigerator and allow it to cool for 10 to 15 minutes.

  • While the batter is cooling, use a serrated knife to roughly chop the chocolate into coarse pieces. Avoid chopping the chocolate too fine, as small pieces will melt when mixed into the dough.

  • Remove the dough from the refrigerator and fold in the chopped chocolate. Cover the bowl and return to the refrigerator for 24 to 72 hours to allow the flavors to intensify.

  • To bake, remove the chilled cookie dough from the refrigerator and let it rest at room temperature for about 10 to 15 minutes to allow it to warm up slightly. Meanwhile, preheat the oven to 350°F with a rack in the center.

  • Scoop the dough into balls about 2 1/4″ in diameter.

  • Arrange the scooped cookie dough on parchment-lined baking sheets, spacing them 3″ to 4″ apart. For consistently shaped cookies, roll each piece of dough into a smooth ball before baking.

  • Bake the large chocolate chip cookies for 18 to 22 minutes, until the edges are set and the cookies are browned, rotating the pan halfway through baking to ensure even browning. Remove the cookies from the oven and let them rest on the baking sheets until cool enough to handle, at least 15 minutes.