Wednesday, June 13, 2018

Tableau is aquiring Empirical Systems

Almost missed this big news today.  Tableau is purchasing/acquiring Empirical Systems:

Again, this is good news.  Check it out and feel encouraged to let me know what you think.

Questions, comments, concerns and criticisms always welcome,


Stepping back to look at a partner team here at Tableau

One of the teams at Tableau is called the Extensions team internally.  They are releasing a new feature to connect data to Tableau and are in the 2018.2 Beta 2 release of Tableau.

I listened to their online training on this and they admitted to a bug they had with their original beta release.

The original manifest XML we posted on github for our fiirst beta had a typo in it. 
Check out this one line:
<manifest xmlns="" manifest-version="0.1">

Do you see the typo?  There are 4 ws in the url.

It should have been
<manifest xmlns="" manifest-version="0.1">

When troubleshooting, this was pretty easy to find (but embarrassing).  It is also easy to fix - just delete that extra w.  And anyone writing code to use extensions could presumably make that fix as well for the beta releases.  Clearly, we are fixing this for final release.

I appreciate this bug, though, since it is a great example of the need to be meticulous with checking text.  That file is not that large, but reading XML can be tedious and typos can creep in.  It is also an example of NOT changing strings right before you release a piece of software. 

Anyway, I thought I would share this bug and fix.  Extensions are pretty terrific - check them out if you have a preview account at

Questions, comments, concerns and criticisms always welcome,

Tuesday, June 5, 2018

Another busy week in Tableau Test

As usual, there is plenty of activity on the test team this week here at Tableau.

A random sample of activities, all of which are typical:
  1. Test pass week!  We ship every quarter (from the test point of view, this happens MUCH more frequently -I wrote about this 2 weeks ago)
  2. Finding and filling holes in test coverage.  With a product as agile as Tableau, the current state is that we have some source code files without adequate automated test coverage.  One of the test teams' tasks is to find these files and add tests to validate the functionality of that file.  This is a fairly straightforward task to explain, but if (and when!) the code is complex, adding tests can be a time consuming event.
  3. One of our testers is adding a rolling log handler to tabpy.  Hop over to github to see her proposed changes.
  4. Oddly, we are updating our Windows machines to the latest version.  That takes a half day - I wish I would have known that BEFORE I clicked the button Monday morning.  I would have waited until the end of the day.
  5. Many server setups and configurations centered around R and Python external servers.  We're getting ready to test the secure capability we are adding to those services.  Again, see the tabpy site for details.
  6. Automation analysis results, find/file/regress bugs, etc…  The standard test workload is always ongoing.

So we are set for another full week of activity here.  Nothing too special about this week so I am just sharing a "day in the life" type of update.

Questions, comments, concerns and criticisms always welcome,

Friday, June 1, 2018

Distracted by some fun math

For many reasons, I have spent a greater amount of time this week simply building code over (and over) again.  While the code is building, I use that time to get caught up on email, online conversations, documentation and so on.

This week I was catching up on RSS feeds and stumbled on this site:  I have spent just enough time there to convince myself the proof is true (heh) and to be impressed by the fellow - Christian Lawson-Perfect -  that built the site.  It was hard to tear myself away, but testing calls…

I never knew that every number greater than one could be expressed as the sum of three palindromes.  A high level view is here.  And thanks to Evelyn Jamb for pointing me to this

On that final note, I subscribed to Evelyn's email against my better judgment.  Normally, email newsletters get bloated, multiply, and generally go off topic or get to the point that I otherwise unsubscribe.  Evelyn's tiny letter has not gone off course - I am glad I subscribed.  If you want to give it a shot, please do!

Questions, comments, concerns and criticisms always welcome,

Friday, May 25, 2018

I had not heard the term "rolling log" before but now Tabpy has one

From the "you learn something new every day" category, I saw that we had a proposed enhancement to Tabpy to support a rolling log.  I had not heard that term before but the concept is fairly simple.

Suppose your application creates a log whenever it gets started.  That log is named "My Application Log.txt" and is saved when the application exits.  Now you have a dilemma.  Suppose I start the application, run it for a bit then exit.  I have my log file.  Then I start it again.

What do I do with the previous log file?

Some obvious options:

  1. I could have the application delete it and start a new one.
  2. I could just keep adding to the existing log
  3. I could create a new log with a different name

Each one of these has pros and cons.  Idea 1 is simple - easy to understand, but you lose the history of what had happened last time the application ran.  That information is often useful if you need to troubleshoot

2 and 3 both keep all that history, but the hard drive will eventually get full.

Option 4 is the Rolling Log.  It is like 3, but deletes all except the last few logs.  I can set it to keep the 5 most recent, 2 most recent, 10 most recent, etc…  Then I retain some amount of history but avoid filling up the hard drive over time.

Check out the proposed change we want to take for Tabpy over at  The pull request is the current request as I write this but that will change over time.

Questions, comments, concerns and criticisms always welcome,

Friday, May 18, 2018

How often we ship Tableau, a test perspective

If you look at Tableau closely, it's obvious - and we make the claim - we ship a new version of Tableau every quarter.  But from the test point of view, we ship much more often.  Here's what is looks like from our point of view.

Imagine you own a textbook publishing company. Each quarter, you release a new textbook covering some new topic you have not covered before.  An example might be Astronomy: The Mountains of Mars from Winter 2017 and  Egyptian History out in Spring 2018.

At the same time you are ready to ship the Egyptian History book, though, the Mars explorer finds enough data to cause you to need to update one of the chapters of the Mars Mountain book.  So for Spring 2018, you have 2 books you need to send out the door: the new Egypt book and an updated version of the Mars book. 

Your proofreaders will need to focus most of their time on the new book but still must devote some amount of time to validating the text and layout of the updated chapter of the Mars book.  Additionally, the new chapter might change the page count of the Mars book.  If so, you might need to bind the book differently.  If there are new photos, you may want to update the cover or back of the book.  The table of contents might change, and the index will likely need to be updated. 

A test case for the index might be to validate the previous contents are intact after the new chapter index is inserted.  If the size of the index no longer fits on the current set of pages, you will need to rebind the book, shrink the index or otherwise resolve this dilemma.  And the proofreaders, who might have naively thought they needed to verify only the new chapter contents, potentially have to validate the entire Mars book.

Testing is in the same position.  While our focus is typically on the new versions of Tableau we release every quarter, we also continue to support the last few years' worth of releases. That means in addition to testing the "major" release of Tableau, we have to test the updates we consistently ship as well.  So from my point of view, always have multiple releases we have to validate.  And that means that we ship far more often than once per quarter.

Questions, comments, concerns and criticisms always welcome,

Friday, May 11, 2018

Constantly learning

One of the requirements that comes along with working in the tech industry (or any industry, really) is to adopt a notion of constant learning.  A new computer science major today will know more than those that graduated ten years ago, and will know less than students hired ten years from now.

In order to stay current with the industry, I have found several opportunities to keep learning.  One of my favorites is online classes (MOOCs, or massive open online courses).  The University of Washington has a Data Science program certificate class starting soon and it looks like there are enough of us around here to develop a study group.  For many folks, having that level of interaction is a necessity for getting the most out of the class.  The environment it creates -  a useful forum for discussing the techniques being taught - really helps cement the  lesson at hand.

I'm not sure what the emphasis of this class will be, though.  I hope it is more along the lines of implementing a few ML routines as opposed to using "off the shelf" solutions (which are never 100% complete - you always need to write code at some point) but it is definitely on my radar.  Let me know if you sign up for any classes in this series (the audit track is free) and maybe we can "attend" together!

Questions, comments, concerns and criticisms always welcome,