Springbank Whisky School Notes and Tips

August 6, 2023

I had the good fortune to attend Springbank Whisky School this year (2023 Term 13) after a long time on the waiting list. What follows is a braindump of tips I received as well as notes from my experiences. I’m sharing this in hope that it helps others to maximize their Whisky School experience as there are not many posts out there giving tips in advance of your school term. Apologies in advance for the length of this post. All of these tips are highly subjective, your mileage may vary, no warranty offered, etc. I’m writing this in 2023, and the Whisky School program may change in the future.

Sign outside of Springbank Distillery, Campbeltown, Scotland

Before Whisky School

Travel Plans and Dates

  • Schedule other distillery tours after Whisky School – consider scheduling any other whisky distillery tours to be after your whisky school term so that you will visit the other distilleries with the new knowledge and experience that you have just gained at Springbank
  • Considering staying over Friday night – I highly recommend staying over on Friday night after completion of the Whisky School. This will allow you the opportunity to have one last relaxed dinner with your classmates, spend some additional time in The Washback Bar sampling new drams and even possibly socialize with some of the people you met during the week. Depending upon the term, it may be possible to stay at The Still Guesthouse on Friday night for an additional charge (lodging but no breakfast)- be sure to ask in advance if this is an option during your term. Otherwise, there are other lodging options in town
  • Consider taking along significant others/partners – you may be able to bring your significant other and have them stay at The Still Guesthouse with you for an additional charge. Be sure to ask well in advance as space in the Guesthouse is limited. Your partner can engage in local tourism during the week, and they can also check in on you and your classmates at The Washback Bar during the scheduled break times
  • Prepare yourself physically – this is a physically demanding week especially in terms of shoveling tons of barley, moving full whisky barrels and repeatedly going up and down stairs and ladders. If you are able do some exercising and conditioning in advance. Also be sure to know your own limits physically so that you will not injure yourself

Packing

  • Break in your steel toe boots – you will be spending hours in your steel toe boots. It’s in your best interest to break them in ahead of school to prevent discomfort. One person in our class found some sneaker-style steel toes and it made a big difference for him. You could also buy your boots at Jim Martin Supplies in Campbeltown (located between the Guesthouse and the Distillery) – but I highly recommend buying in advance and breaking them in. One other thing to note: my pair of steel toe boots added nearly 5 pounds (2.2 kg) to the weight of my luggage
  • Don’t pack a coat – the Whisky School will provide you with a fairly heavy rain-proof jacket when you arrive on Sunday night. If you can manage it, don’t pack an additional coat as the supplied coat should suffice for the school term and the rest of your trip
  • Consider packing long-sleeve undershirts – you will be wearing the Springbank-supplied t-shirts all week, and often will be too hot to wear your coat while shoveling, etc. However, you may find that the t-shirt by itself is not sufficiently warm depending on the time of year. Some folks in our class packed long-sleeve shirts that they could wear under the Springbank t-shirt
  • Consider packing fewer clothes – there is a washing machine and dryer at the Still Guesthouse, and you may use those in the evenings (ask for permission and instructions first). You can leverage the laundry options in order to pack fewer clothes
  • You will get dirty – to be very clear, you will get sweaty and dirty. You may find barley in your shoes and pockets. You may get paint or soot on you. In other words, bring plenty of clean clothes or make a plan for doing laundry.
  • Consider packing an N95 mask – if you have asthma, you might find it helpful to bring along an N95 mask or similar for occasional usage in the malting and milling areas (especially if you are around for the loading of new barley into the steep). One of our classmates had some asthma issues in the malting area
  • Consider packing something to share (whisky, etc.) – consider bringing a bottle of whisky from where you live to share with your classmates. If you don’t have a local distillery, consider bringing something else that you can share and that reflects the character of your hometown (food, candy, etc.). Attendees of the school are from all over the world and this is a chance to share with your classmates. Also, consider taking your bottle of whisky over to Springbank and sharing it with them as well
  • Consider packing some small gifts – considering bringing some small physical gift items for the distillery employees and/or your classmates. This can be small items such t-shirts, hats, pins, etc. One person in our class gave out challenge coins
  • Consider packing a luggage scale – per the two bullets below, I highly recommend taking along a small luggage scale and reviewing the luggage weight limits of your airline in advance
  • Plan to bring whisky home – upon completion of Whisky School you will receive the bottle that you blended yourself during the Blending Lab event on Thursday afternoon. You should have a plan to get that bottle home safely. In addition, you will have the opportunity to purchase some bottles at discount at both the Springbank Distillery Shop and the Campbeltown Cadenhead’s location (details documented in your paperwork). In the end, it doesn’t take much effort to find yourself needing to pack a number of bottles of whisky in your luggage. For example, if I had purchased one of every item available in the Springbank shop I would have brought home >10 bottles. Packing whisky for travel is beyond the scope of this post – and there is plenty of advice online – but you’ll be happiest if you go prepared (as in maybe take an extra suitcase…)
  • Leave room in your luggage to bring things home – don’t forget that you’ll also be bringing home your five Springbank t-shirts, the Springbank coat, a high viz vest, and various bits of paperwork. Make sure you have room to bring those home. And that’s before you buy any souvenirs or whisky!

Springbank Distillery Malting Floor Panorama

Sunday Night Before Whisky School

  • Dinner with classmates – consider arriving in Campbeltown early enough to have dinner with your classmates and get to know them a bit. You’ll be working side by side all week and it’s a good chance to learn each other’s names and a bit about each other. One good option is the Ardshiel Hotel Restaurant & Whisky Bar – they have an extensive whisky selection and are the only Scotch Malt Whisky Society Partner Bar in Campbeltown. Getting to know your classmates can be challenging (especially for introverts) but it will pay dividends throughout the week. You will be sharing a house with your classmates for the week – make the time to build good working relationships
  • Exchange contact info – considering exchanging contact info before Whisky School starts. There will be times when you are separated or divided into smaller groups and it is helpful if you have a way to quickly message each other (text, WhatsApp, whatever) rather than running around the distillery looking for each other
  • Get some sleep – it will be tempting to stay up late chatting. However, if you work a desk job like me, you are about to spend a week that may be more physically taxing than your average week. Set yourself up for success with a good night of rest

Springbank Distillery Mash Tuns Panorama

During Whisky School

  • Ask questions – if something is unclear or you want to learn more about a given subject, just ask! All of the folks at Springbank are super helpful and willing to answer your questions
  • Try every activity – do your best to try each activity at least once, even if you are tired. It’s too easy to hang back and miss an opportunity to try something, so do your best to lean in and try everything. This may be challenging for introverts
  • Get comfortable sharing drinks – there will be numerous times where you may be drinking after one of your classmates. If you are comfortable doing so, it will greatly increase your enjoyment of the week. Being comfortable sharing also means that you can share drams and flights throughout the week and maximize the number of unique whiskies that you get to taste. If the Production Manager passes an open bottle to you at 8:30am on Monday morning right off the bottling line, do you want to say “no” and not take a swig?
  • Try to taste everything – take every opportunity to taste everything that you can: raw barley, steeped barley, barley right out of the kiln, wort, mash, new make (both direct from the still and proofed down for barreling), anything you are bottling, etc. You should always ask first – but you should definitely seize every opportunity
  • Learn everyone’s names – do your best to learn the name of each person you work with as you will encounter them multiple times throughout the week. The distillery employees have an advantage since you are wearing a nametag, but do your best
  • Compare notes – your class of six will often be split into two groups of three, so you will do some of the activities in a different order. Use the common mealtimes to compare notes with the other group for tips on the things they found most interesting or fun
  • Keep track of your belongings – you have two lockers, one in the Bottling Hall and one in the Staff Canteen. Be aware that the Bottling Hall gets locked up for the night fairly early and you can easily find your room key locked away in your locker for the night (this happened to someone in our class)
  • Ditch the steel toes when possible – if you pay attention to the schedule you can avoid wearing your steel toe boots for certain activities: the Campbeltown walking tour (Monday afternoon), the Glengyle tour and Blending Lab (Thursday afternoon), and the Final Exam (Friday morning)
  • Leverage the Washback Bar – be sure to make time to sample some drams in The Washback Bar. At the end of the working day before dinner (5pm to 6pm) is usually a good time. There is an amazing selection of rare distillery offerings at quite affordable prices. It’s also a chance to sample nearly everything that is available in the Distillery Shop, which can help you make up your mind what to buy and take home. I definitely recommend the various flights for getting to taste a wide variety of things – especially if you share the flights with your classmates. Sharing with your classmates is also a great way to get a handle on each person’s unique palate and will make the journey together throughout the week even more fun
  • Make an extra large blend during the blending lab – some of our group made up 80 cl of their custom blend instead of 70 cl, this allowed them to share their custom blend with the class. We asked before we did this, and you should ask first as well. Highly recommended
  • Work harder if you want to – some members of our class don’t usually eat breakfast and preferred to start their day earlier than scheduled by assisting on the malting floor at 6am. Not everyone is able to do this, but the folks at Springbank are certainly happy to have the help. One detail – be sure to let your hosts know that you are skipping breakfast so they don’t unnecessarily make too much food
  • Tip your hosts – make sure you have some cash on hand so your class can put together a tip for the hard-working folks taking care of the Still Guesthouse and cooking your meals
  • Reserve a tour at Glen Scotia – during the Campbeltown walking tour on Monday, you will briefly stop in at Glen Scotia distillery. Take that opportunity to schedule a tour for 2pm or 3pm on Friday for your entire class as a group
  • Make time for Cadenhead’s – if you get the opportunity make some time to visit both the shop and the bar. You will stop in there briefly during your walking tour on Monday

Springbank Distillery Stills Panorama

After Whisky School

  • Tour Glen Scotia – if you made a reservation on Monday (like I suggested above), you can have the fascinating experience of touring the Glen Scotia distillery with your classmates after Whisky School. Highly recommended – it’s very cool to see a different distillery with your classmates and compare notes. You can easily make the 2pm tour without needing to hurry. Don’t forget though – this isn’t Whisky School and you can’t wander just anywhere and climb on things, etc.
  • One last visit to the Springbank Distillery Shop – you may want to make one final visit to the distillery shop to buy some last-minute whisky or other souvenirs
  • Visit Cadenhead’s – if you haven’t previously made it to the Cadenhead’s shop or bar, Friday afternoon/evening is a good opportunity to do so.
  • Dinner with your classmates – this is one last opportunity to socialize with your classmates, decompress from the week, compare observations and just generally unwind before you all head home
  • Keep in touch – lasting friendships can be formed during Whisky School. Consider exchanging contact information with your classmates and keeping in touch

Thank You

  • Firstly, thanks to Nelley & Phil (justanotherwhiskeycouple) for the tons of advice before my trip as well as inspiring this post.
  • Big thanks to my fellow classmates for making the experience enjoyable and memorable: Erik W., Mike K., Peter N. Sungdon L., and Talor M.
  • Additional thanks to Talor for reviewing and making additional suggestions around topics of gifts, laundry and physical fitness.
  • And even bigger thanks to the amazing folks at Springbank – I won’t be able to remember them all: Donald, Sandra, Fiona, Craig A., David, John L., John D., Rob M., Daniel, Robert M., Kerry, Ian, Joyce, Julie, Craig K., Joanna, Lea, Ali, Markus, Cameron, Findlay and of course Gavin.
  • Finally, special thanks to Donald from Springbank for the frank and enlightening discussions about elements that make for an enjoyable Whisky School experience.

I hope that these tips can help you to maximize your enjoyment at the Springbank Whisky School. It is truly a unique opportunity and if you will come to it with an open mind and take every opportunity you will come away with a fantastic experience. Slàinte mhath!

If you’d like to see additional photos from the Springbank Whisky School, I have shared a few hundred in an album on Flickr.

Barrels at Springbank Distillery, Campbeltown, Scotland


Taking Apart The NES Version of Tetris

January 28, 2014

I just came across this article which digs through the actual code of the original NES version of Tetris and then creates an AI to play it.


Dreaming Tetris

September 12, 2013

Fascinating. Dr. Robert Stickgold found that amnesiacs will dream about Tetris (aka The Tetris Effect) even though they do not remember playing the game.


Playing Tetris Forever

August 2, 2013

Somehow I had previously overlooked this excellent page on methods for playing Tetris forever.


Move Notation System For Tetris

December 23, 2012

Chess has had standard notations for a long time. Isn’t it time that Tetris had one as well?


Pioneer Spacecraft and Data Preservation

December 20, 2012

The newest IEEE Spectrum has a nice article on debugging a data anomaly with the Pioneer 10 and Pioneer 11 spacecraft. It is a short and interesting read – one of the key issues was the need to review many years of historical data retrieved from a variety of physical media formats.


WF3 Types Deprecated In .NET 4.5

December 16, 2012

As you are no doubt aware, .NET 4.5 shipped in October.

With the release of 4.5, our team has deprecated the original Workflow engine aka WF3 (System.Workflow, etc.). There is a detailed announcement from Jurgen on the team blog.

The types are marked deprecated but have not been removed. Using the types will result in build warnings, but the types may still be used. However, they will be removed in some future release.

I also want to point out that the types related to the WF Rule Engine are not marked as deprecated.

Full details of items marked obsolete in 4.5 can be found here.


Finding duplicate copies in msbuild logs

April 1, 2012

I have recently needed to track down some build races due to duplicate file copies. The build in question is MSBuild-based.

I found this tool provided by co-worker Buck Hodges to be very helpful.

I ran into one issue with the tool – it does not handle node names that contain colons, such as “152:3”. One cause of such node names is when the same project is built multiple times. So, I made some changes to the code to support these node names.

I also rewrote the output logic to group the violations according to the file being copied. This is very handy when you have more than 2 projects racing on the same file since the original tool would report a race for projects A & B and B & C, but not A & C.

Here is the updated source code with my modifications. Big thanks to Buck Hodges for the original!

using System;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;

/*
 * Original code taken from:
 * http://blogs.msdn.com/b/buckh/archive/2012/01/21/a-tool-to-find-duplicate-copies-in-a-build.aspx
 * 
 * Modified to support node names that contain colons and to group the output by race.
 *
 * This tool finds cases where more than one file is copied to the same target.  This will cause
 * build breaks when msbuild executes the copies in parallel because the copies are independent
 * (there are no dependencies).  This typically occurs in incremental builds because incremental
 * builds do a lot less work (not nearly as much to build), resulting in the copies being a much
 * higher percentage of the build activities and more likely to collide.  Gated checkin,
 * continuous integration, and developer/tester builds are almost always incremental, not clean.
 * These issues are still possible in regular clean builds, such as done nightly by the build lab.
 * 
 * These race conditions are difficult to debug manually.  Since msbuild records all of the copies
 * made via the copy task, we can use the log file to identify cases where the same destination
 * path is used in more than one copy.
 * 
 * Use the *.normal.* logs from a clean build with this tool.
 * 
 * The best thing to do is to ensure that each file copy to a particular destination is done by
 * one and only one project.  When that is the case, you are guaranteed not to have problems
 * with two copies colliding and breaking your build.
 * 
 * Here's example output from buildr.suitesrc.normal.log that shows a copy failure.  Here two
 * copies were executed in parallel and the second one failed, causing the build to fail.
 * 
    48>Project "D:\a1\dd\alm\tfs_core\Admin\Servicing\Data\dirs.proj" (48) is building "D:\a1\dd\alm\tfs_core\Admin\Servicing\Data\Azure\Microsoft.TeamFoundation.Data.Azure.csproj" (55) on node 8 (BuildLinked target(s)).

    55>_CopyOutOfDateSourceItemsToOutputDirectory:
         Copying file from "D:\a1\dd\alm\tfs_core\Admin\Servicing\Data\ReleaseManifest.xml" to "D:\a1\binaries.x86ret\bin\i386\ReleaseManifest.xml".


    48>Project "D:\a1\dd\alm\tfs_core\Admin\Servicing\Data\dirs.proj" (48) is building "D:\a1\dd\alm\tfs_core\Admin\Servicing\Data\SqlServer\Microsoft.TeamFoundation.Data.csproj" (53) on node 4 (BuildLinked target(s)).

    53>_CopyOutOfDateSourceItemsToOutputDirectory:
         Copying file from "D:\a1\dd\alm\tfs_core\Admin\Servicing\Data\ReleaseManifest.xml" to "D:\a1\binaries.x86ret\bin\i386\ReleaseManifest.xml".

    53>D:\a1\dd\tools\x86\managed\v4.5\Microsoft.Common.targets(3516,5): error MSB3021: Unable to copy file "D:\a1\dd\alm\tfs_core\Admin\Servicing\Data\ReleaseManifest.xml" to "D:\a1\binaries.x86ret\bin\i386\ReleaseManifest.xml". Access to the path 'D:\a1\binaries.x86ret\bin\i386\ReleaseManifest.xml' is denied. [D:\a1\dd\alm\tfs_core\Admin\Servicing\Data\SqlServer\Microsoft.TeamFoundation.Data.csproj]
  
 * 
 * Note that there may be multiple copies in a sequence.
 * 
    291>_CopyOutOfDateSourceItemsToOutputDirectoryAlways:
         Copying file from "D:\a1\dd\suitesrc\TFS\common\deploytools\httpcfg.exe" to "D:\a1\binaries.x86ret\SuiteBin\i386\TFS\Tests\httpcfg.exe".
         Copying file from "D:\a1\dd\suitesrc\TFS\common\deploytools\makecert.exe" to "D:\a1\binaries.x86ret\SuiteBin\i386\TFS\Tests\makecert.exe".
         Copying file from "D:\a1\dd\suitesrc\TFS\common\deploytools\winhttpcertcfg.exe" to "D:\a1\binaries.x86ret\SuiteBin\i386\TFS\Tests\winhttpcertcfg.exe".
       CopyFilesToOutputDirectory:
         Copying file from "D:\int\641\194\suitesrc\tfshttpsconfig.csproj_80399372\objr\x86\TfsHttpsConfig.exe" to "D:\a1\binaries.x86ret\SuiteBin\i386\TFS\Tests\TfsHttpsConfig.exe".

 * Nodes are reused by msbuild.  The result is that a given node may process many projects, so it's not
 * possible to scan and pair up all of the nodes and project files at once.  In the code below, 
 * you will see that it always tracks the most recent node for that reason.
 * 
 */

namespace FindBadCopies
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length < 1)
            {
                Console.WriteLine("Usage: findbadcopies <logfile>\r\n");
                Console.WriteLine(
@"This tool scans a build log, such as buildr.suitesrc.normal.log, and produces a
list of file paths that are the targets of more than one copy and shows which
project files initiated each copy.  These redundant file copies are prone to
fail periodically in incremental builds, such as gated check ins and CI builds,
because copies are a higher percentage of the operations in the build, making
it more likely that two collide.");

                return;
            }

            ProcessFile(args[0]);
        }

        private static void ProcessFile(String fileName)
        {
            Dictionary<String, String> nodeTable = new Dictionary<String, String>(1000, StringComparer.InvariantCultureIgnoreCase);
            Dictionary<String, String> pathTable = new Dictionary<String, String>(1000, StringComparer.InvariantCultureIgnoreCase);
            Dictionary<String, HashSet<String>> duplicateTable = new Dictionary<String, HashSet<String>>(StringComparer.InvariantCultureIgnoreCase);
            String previousLine;

            string[] text = File.ReadAllLines(fileName);

            // Process all of the lines in the file, skipping the first line (we need the previous line,
            // and the first line in the file isn't important to this tool).
            string lastNode = String.Empty;
            for (int i = 1; i < text.Length; i++)
            {
                previousLine = text[i - 1];

                // Record most recent node.  The text that appears with it can be different
                // (see sample log data).
                string prevLinePattern = @"([0-9]+\:?[0-9]*)[>]";
                Match match = Regex.Match(previousLine, prevLinePattern, RegexOptions.IgnoreCase);
                if (match.Success)
                {
                    lastNode = match.Groups[1].Value;
                }

                // If the line is recording the start of a project, add it to the table.
                string pattern = @"([0-9]+\:?[0-9]*)[>]Project ""[^""]+"" \([0-9]+\:?[0-9]*\) is building ""([^""]+)"" \(([0-9]+\:?[0-9]*)\)";
                match = Regex.Match(text[i], pattern, RegexOptions.IgnoreCase);
                if (match.Success)
                {
                    string node = match.Groups[3].Value;
                    String projectPath = Path.GetFullPath(match.Groups[2].Value);

                    // Because nodes are reused, we are only keeping the project path for the most recent use
                    // of a given node.
                    nodeTable[node] = projectPath;

                    // If we matched a project line, it can't be a copy line.
                    continue;
                }

                // If the line is one that records a copy, see if there was an earlier copy made to
                // the same target path.  First, try the output of a copying task.
                string copyingPattern = @"Copying file from ""[^""]+"" to ""([^""]+)""";
                match = Regex.Match(text[i], copyingPattern, RegexOptions.IgnoreCase);
                if (match.Success)
                {
                    String targetPath = null;
                    try
                    {
                        targetPath = Path.GetFullPath(match.Groups[1].Value);
                    }
                    catch (Exception)
                    {
                        // There is a file in the test tree that uses non-English chars that causes
                        // GetFullPath() to throw (TODO: understand why), so we keep the raw text.
                        targetPath = match.Groups[1].Value;
                    }

                    // If we have already seen the target path, 
                    // then we have a duplicate copy path target to report.
                    String otherNode;
                    if (pathTable.TryGetValue(targetPath, out otherNode))
                    {
                        HashSet<String> otherNodes;
                        if (duplicateTable.TryGetValue(targetPath, out otherNodes))
                        {
                            otherNodes.Add(nodeTable[lastNode]);
                        }
                        else
                        {
                            HashSet<String> nodeList = new HashSe<String>();
                            nodeList.Add(nodeTable[otherNode]);
                            nodeList.Add(nodeTable[lastNode]);
                            duplicateTable[targetPath] = nodeList;                   
                        }
                    }
                    pathTable[targetPath] = lastNode;
                }
            }

            foreach(KeyValuePair<String, HashSet<String>> kvp in duplicateTable)
            {
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.WriteLine("Duplicate file: {0}", kvp.Key);
                Console.ResetColor();

                foreach(String project in kvp.Value)
                {
                    Console.WriteLine("      Project: {0}", project);
                }
                if (kvp.Value.Count == 1)
                {
                    Console.WriteLine("      (A single project listing means that this project performed multiple copies of the same item.)");
                }
                Console.WriteLine();
            }
        }
    }
}

Pac-Man, How Does It Work?

December 8, 2010

Speaking of game AI…two Pac-Man-related links are making the blog rounds these days – one of them is new.

The new one is Chad Birch’s “Understanding Pac-Man Ghost Behavior”. It is clear and well illustrated.

As Chad points out, he was inspired by and used Jamey Pittman’s “Pac-Man Dossier”. This is a nice resource.

It also seems that I haven’t previously blogged Don Hodges’ fix to a bug in the behavior of two of the ghosts. (The bug-fixing of classic videogames is a topic we will return to in the future.)

Of course, the ghosts need a Pac-Man to chase. I have previously linked to a Ms. Pac-Man computer player competition. Of specific interest is this paper on evolving rules to play Ms. Pac-Man (seems that I have not directly linked it before).

(Post title is of course a play on the “magnets…” meme.)


Detecting Poker Bots

December 7, 2010

The folks at the PokerStars online poker service actively police their games to make sure that bots are not being used to gain advantage.

Here’s a recent post from their Game Security staff demonstrating that they paid a visit to one player in order to witness the playing and playstyle in person.

It ends with the following wonderful quote:

We are pleased to report, however, that ‘rs03rs03’ is human.

(I also thought JWZ’s take on it was amusing. But you would need to have read Neuromancer to get it.)