Monad transformers

I’ve been spending some time working through Haskell Programming From First Principles recently which is a very comprehensive introduction to functional programming and Haskell.

One of the exercises to implement a simplified command line version of Morra, which involves keeping track of scores and reading user input.

My initial method to play a round looked something like this:

playRound :: Config -> Scores -> IO (Bool, Scores)
  playRound config scores = do
  putStr "P1: "
  p1HandMaybe <- getHumanHand
  case p1HandMaybe of
    Nothing -> return (True, scores)               -- error case 1
    Just x -> do
      putStr "P2: "
      p2HandMaybe <- getHumanHand
      case p2HandMaybe of
        Nothing -> return (True, scores)           -- error case 2
        Just y -> do
          let evenWins = (x + y) `mod` 2 == 0
          return (False, updateScores config evenWins scores)

playRound takes the configuration for the game and the current score, and returns a side effecting computation that will return a tuple with the new scores and a boolean indicating if the game is finished.

The method getHumanHand used above returns a IO (Maybe Int), which can be interpreted as a side effecting action that might return an integer (in this case, the side effect is reading from the console and we can’t trust the user to enter an integer, hence the Maybe).

The problem then is that we’re then manually unpacking these Maybe Int values, which leads to the ugly nesting and case statements. However, we can see on the lines marked ‘error case’ above that the handling for both cases is the same - we assume that if the user has entered something other than an Int that they want to end the game.

I recently learned about Monad transformers, which allow you to compose monads. In this case, we want to compose the Maybe monad with the IO monad, so we will use MaybeT.

Rewriting getHumanHand to return a MaybeT IO Int and rewriting playRound results in the following:

playRound' :: Config -> Scores -> IO (Bool, Scores)
playRound' config scores = do

  newScores <- runMaybeT $ do
    liftIO $ putStr "P1: "
    p1Hand <- getHumanHand'
    liftIO $ putStr "P2: "
    p2Hand <- getHumanHand'
    let evenWins = (p1Hand + p2Hand) `mod` 2 == 0
    return $ updateScores config evenWins scores

  return $ case newScores of
    Nothing -> (True, scores)
    Just x -> (False, x)

The nice thing about this implementation is that we’ve avoided the need for pattern matching, as the do block above where we’re dealing with the potentially failing computations will immediately short circuit and return a Nothing if either user fails to provide a legitimate value.

This is the first time I’ve actually used a Monad transformer, and it was good to see how it cleans up the implementation of playRound.

Europe

The post below is a concatenation of multiple emails I wrote during the trip, apologies if it seems a litte disjointed.


I’m writing the first part of this as I sit on the train on the way to Salzburg, there’s about an hour left of a trip that takes a little under two hours.

I had three very busy days in Munich, managing to see

  • Deutsches Museum
  • Marienplatz
  • BMW welt
  • BMW museum
  • Olympic park
  • Tollwood SommerFestival
  • Residenz (external and garden)
  • Englischer Garten
  • Schloss Nymphenburg, Gardens & Outbuildings
  • Dachau Concentration Camp Memorial

The museum was awesome, I kept thinking how much I would have loved a museum like that when I was little. It was primarily a technical museum - the sections were mining, marine navigation, oceanography, foundries, machine tools, metals, power machinery, marine navigation, electric power, new technologies, physics, energy technologies, pharmaceutics, historic aviation, ceramics and glass production, paper, musical instruments, astronomy, measures and weights, computers, mathematics, microelectronics (I geeked out a bit in these last three), chronometery and geodesy. It is a really big place, you could easily spend upwards of an hour in each of those sections. I spent about 6 hours in the museum and easily could have spent twice that, though maybe over two days; there is only so much museum-ing I can handle.

First up on Thursday morning I went to the area of the city where the BMW headquarters and factory are located.

There is also building called BMW Welt (‘welt’ -> ‘world’) which was like a showroom on steroids. They had some Rolls Royces there too because BMW, Mini Coopers and Rolls Royces are all either owned by one company or they have some partnership going on. I planned to do a tour of the BMW factory but it was sold out (until August!) so I settled for the museum.

The BMW museum had all sorts of stuff from the life of the company over the last 100 years and talked about how much it’s changed, from manufacturing military parts to bikes, cars, airplane engines and even pots and pans at the end of the war. They used POW labour at one point during the war which I didn’t expect given a company like BMW, but this was during the war when they had a lot less control over their operations.

Once I was done at the museum I made my way into Olympiapark where the 1972 Olympics were held. This whole area has been turned into a public space and the stadium and halls are still used for events. While I was there an event that’s on this weekend was being setup, and there was wake boarding and some slopestlye mountain biking going on. They were still completing the mountain biking track so no one was doing full runs but there were pretty massive jumps in there. I got a video of one guy casually doing backflips for the crowd!

I also spotted an event called the Tollwood Sommerfestival from a lookout so I went and had a peek there. It had a cool vibe and would have been good fun later in the evening, but it was a long way from where I planned to finish the day.

From the Olympic Park I made my way back to Munich Residenz where the Bavarian monarchs used to live but didn’t have time to go inside. It’s a museum now but I just checked out the externals and went through the courtyard on my way to the Englischer Garten.

The English Gardens are massive, I only walked through half of them in then end despite plans to go from one end to the other. There is and really cool spot at the start of the gardens where the water flows in (not sure if it’s flowing through or recycled through the canal system in the park - maybe both), there were people surfing there! They’ve set something up that makes an artificial wave across the canal.

In the middle of the gardens is this relic of a bit of a China craze that went through Munich a while back. There is this pagoda type thing, and all around is the most German food/drinks setup ever. So many 1L mugs of beer! I had my dinner of sausages and sourkraut there along with a wheat beer before making my way home.

First up on Friday I went to Nymphenburg Schloss which is a huge palace some Bavarian rules used to live in. Construction started in 1664 and there were still buildings being added and pretty big modifications being made to the grounds until 1825. Water is a very big feature throughout the grounds and is provided by a 2km long channel that brings water from a nearby river. There was a really run down looking building called the Magdalenenklause in the gardens, but it was actually built to look that way as an escape from the prim and proper life at court.

After I’d wandered all around the gardens and reached appropriate levels of sunburn, I made my way to Dachau, where there was a concentration camp. This wasn’t a camp where mass executions were carried out in gas chambers, though there was a chamber built there. The people running Dachau instead really believed in ‘extermination through labour’, whereby they overworked people until they pretty much died of exhaustion. The gates to the camp said “work shall set you free”, though freedom in this case normally meant death. There were 32 huts each originally built to house 250 people, but apparently they each held upwards of 1000 people towards the end of the war. Over 40,000 people died/were executed there in the twelve years it was operating. Sobering place.

After Dachau it was time to head to Salzburg which was very easy to figure out. The public transport in Munich is amazing, I had no trouble getting around despite not knowing the city and not understanding what anyone was saying or what anything said.


This is yet another instalment that’s being written while on the train, this time from Salzburg to Vienna. I have internet on this train, and it’s probably faster than what 99% of Australian ISPs provide (thanks Tony). It made me laugh when I connected to WiFi and saw this immediately:

… ‘this is of course free’. In Aus this would cost an arm and a leg and take four hours to set up.

During my two days in Salzburg I visited:

  • Festung Hohensalzburg - a fortress
  • The Domquartier - a museum combining the church and residence of the ‘Prince-Archbishop’
  • Kapuzinerberg - a mountain in the middle of town, not as heavily fortified as Festung Hohensalzburg
  • Schloss Mirabell - a palace built around 1606
  • Augustiner Brauhaus
  • A few other places around Salzburg, though only the exteriors:
    • Mozarts geburtshaus and wohnhaus (where he was born and lived, respectively)
    • Christian Doppler’s geburtshaus
    • About 1000 churches

Festung Hohensalzburg was probably the hightlight for me. There is evidence that there have been people on Festungsberg since year 0180, and construction started on Festung Hohensalzburg in 1077. It’s no wonder people have been using it as a stronghold for so long, it is an amazing place to put up a strong defence (it’s actually never been taken by force, but was surrendered once during the Napoleonic War of the Second Coalition in 1800 when the ruler at the time bailed to Vienna). I think the only people to actually attack it were some peasants in 1525 who were promptly repelled. The fortress was commissioned by the ‘Prince-Archbishops’ of Salzburg. These guys were the supreme rulers, as they’re non-secular princes as well as archbishops of the church. One of the really interesting things there is the ‘Salzburger Bull’, which is a very loud mechanical organ that was used to signal various things to the town (photo here). The fortress was used as a military outpost until 1861.

Next up was the Domquartier, a museum that combines a palace where the Prince-Archbishops used to live and do the princely thing and the cathedral where they used to be pray and carry out their duties as archbishops. The residence building was initially built in 1604 and the cathedral in 1614. The two buildings have been joined on the second level since one of the Prince-Archbishops decided they didn’t like getting their feet wet when walking between the two. The museum is setup so that you follow the path that a visitor would have followed when seeing the Prince-Archbishop, which mainly involved going through several extravagant rooms. The first room is huge and not as fancy, but the further along you get the smaller and more expensive-feeling the rooms get, this is apparently because the more important you were the further into the palace you could get. The rooms all have portraits of Alexander the Great painted on the ceilings, which were all indirectly drawing comparisons between Alexander and the Prince-Archbishops you were about to see. Sadly I don’t have any photos of the interior of the palace as they weren’t allowed.

It was a bit of a rainy afternoon so I started making my way back to the hotel and decided to check out Augustiner Brauhaus on the way. It’s massive - 5,000 square meters internally and with a beer garden that can sit 1,400 people. The beer is rolled out in massive barrels from which people fill up their steins.

On Wednesday I went to Mozarts geburtshaus and wohnhaus but decided I’d had enough of museums and instead went for a walk up the Kapuzinerberg. The Kapuzinerberg is a mountain in the middle of town, not as heavily fortified as Festung Hohensalzburg. There is one castle up there (Franziskischlössl) and a massive wall that goes all the way back towards the river to another stronghold. This second stronghold could be used to defend the eastern side of what was at the time the only bridge across the river (Hettwer-Bastion). I walked the wall back from the Franziskischlössl to the Hettwer-Bastion, going past some signs that looked vaguely like they were warning me about something. Building this wall now would be a pretty impressive feat, let alone building it in three years from 1629-1632. I think it would take the Brisbane City Council about 100 years and several billion of machinery. The Franziskischlössl and the wall were built such that there are no angles were attackers could hide without being under fire. The main drawbridge into Franziskischlössl is protected on three sides, and there were watchtowers built within shouting distance of each other all the way back to Hettwer-Bastion.

From the end of the wall I made my way to Schloss Mirabell - a palace built around 1606, also for the Prince-Archbishops. The palace building itself is still used by the local council and events and concerts are held there, but the gardens are open for all to see. One of the features of the gardens are 14 marble dwarfs which were put there in 1710 as part of an outdoor theatre. Several scenes from The Sound of Music were shot in the gardens.


Ahoy! (which is apparently a common greeting used by people in Bratislava as well as by pirates)

In keeping with the train theme, I’m starting this update on the train back to Vienna.

Since arriving in Vienna on Sunday night, I have checked into our Airbnb, done some exploring of Vienna, and spent the day in Bratislava, the capital of Slovakia. Bratislava just on the Slovakia side of the Austria-Solvakia border and only an hour in the train from Vienna.

We went for a walk along part of Donauinsel on Monday morning. Donauinsel is a roughly 20km long island in Vienna on the Danube River. From there we walked back towards our apartment, hoping to walk through a local university but somehow walking past a horse racing track and a huge construction site. After a lunch at home with groceries from the local supermarket and Kirstens arrival we headed off to explore some of Vienna.

From the bridge to Donauinsel, we’d seen a very large church nearby so we had a look at that first. The church was ‘Heiliger Franz von Assisi’, or the St. Francis of Assisi Church. It was built much more recently than most of the churches around here, construction only started in 1898! The interior was quite plain compared to how it looked from the outside:

After checking out the local church, we caught the U-bahn (Untergrundbahn, or undergroud railway in English) to Schönbrunn Palace. The first part of the mansion there was built in 1548 and was normally occupied by members of the Habsburg Monarchy, including Franz Joseph, the longest-reigning emperor of Austria. It’s been a museum since the fall of the Austro-Hungarian Empire in 1918. It’s a pretty striking place:

The final stop on Monday was Karlskirche (or St. Charles’s Church) which was built between 1716 & 1737. The columns outside this church are pretty unusual:

I will send another update about Bratislava, but it’s Wednesday morning now so I’m off to explore some of Vienna :)


I’m not writing on a train this time, but having a relaxed day in Vienna as my feet feel like they’re about to fall off. I will probably head out and go to a museum or something this afternoon.

As I said in my last email that we went to Bratislava on Tuesday which was a really good trip. Most of our time there was spent on a free walking tour of the city (‘free’ but tips expected - our guide was really good though). I made a map of the path we took.

There are a lot of statues in Bratislava, including one of Hans Christian Andersen (author of “The Emperor’s New Clothes”, “The Little Mermaid”, “The Nightingale”, “The Snow Queen”, “The Ugly Duckling”, “Thumbelina” …) which we would have walked straight past if our guide had not pointed it out. The back of the statue has lots of things from his stories. Another one is the ‘man at work’:

Courtesy of Frettie on Wikimedia Commons

This statue doesn’t really have a name, but a sign warning saying ‘Man at work’ was put up after people kept tripping over him. According to the locals his name is Cumil and he is the quintessential Bratislavian man at work, as he just chills out all day and perves on the tourists. The executioner below has been present for quite some time in one form or another:

This is at the entrance to the lane where the executioner used to live (his house is now a massage parlour!). The lane where the executioner lived was next to Michael’s Gate, part of the fortifications for the city build in the mid 14th century. A second gate was added along with a 90° corner in the 17th century, so that enemies had to slow down even if they breached both gates.

From Michael’s Gate we walked on to the Slovak National Uprising Square. This square, as well as another in the middle of the city, were important sites in the Velvet Revolution which in 1989 ended the communist rule in then Czechoslovakia (the split into the Czech Republic and Slovakia happened in 1993).

After the SNP Square we visited The Church of St. Elizabeth/The Blue Church/The Smurf Church which was built in 1908 and is very, very blue:

After a final short walk we were sitting at the entrance to a building when our guide was telling us more about the Soviet invasion of Czechoslovakia in 1968. She handed around a physical copy of a rather controversial photograph. I haven’t included it here, as the image isn’t in the public domain, but after looking at it we realised we were sitting on the stairs of the building in the background!

The tour guide also told us some interesting stories about traditions in Slovakia. For men, easter apparently involves pouring water on the women in your life and lightly hitting them with willow sticks. Christmas means it’s time to catch a carp and keep it in the bathtub for a few days before eating it for a Christmas meal.

I did some exploring of Vienna yesterday, but I will send another email about that!


I’ve finally got around to writing up what I got up to in Vienna, while I’m on the train of course! We’re currently on the long ride from Vienna to Mainz. The good thing is the train is currently going at 170 km/h. I’ll split this into a few emails, the first one is about Wednesday when I explored the inner area of Vienna.

I started out at the Belvedere, a complex consisting of two palaces, a botanical garden and even a small zoo. The large palace now houses a museum (or an art gallery, I can’t remember - there are so many galleries and museums in Vienna). The palace was built was built as a summer residence for Prince Eugene of Savoy sometime in the early 1700’s. Savoy was a big fan of animals and had a small zoo setup there, though that’s all gone now.

On my way to the centre of old Vienna I walked past Heldendenkmal der Roten Armee (the Heroes’ Monument of the Red Army), a Soviet War Memorial built in 1945 (that is at times a little unpopular with the locals, as the Soviets caused quite a bit of damage when they took the city in a battle from 2 to 13 April 1945 and in the weeks following the battle).

From there I walked north to the Ringstrasse (Ring Road) which forms a loop around most of the old buildings and museums. There was lots to see, but I didn’t actually go into many places as they all had a roughly €10 entrance fee and there wasn’t time to do them justice on the Wednesday. I walked past a bunch of places inside the Ringstrasse, including

  • The ‘Haus der Musik’ was my first stop inside the Ringstrasse, it is kind of like a museum with ways for people to explore sound and how sounds are generated. Entry was a bit expensive and I wasn’t sure if I wanted to go in, but there was a choir performing in the lobby. When I heard the person organising the choir speak after one of their songs, I thought they had a bit of an Australian accent. Sure enough, it was a choir from Adelaide called Young Adelaide Voices.
  • A bunch of embassies
  • Wiener Staatsoper (Vienna State Opera), an opera house that opened in 1869
  • Albertina, a museum/gallery built in 1805 with approximately 65,000 drawings and approximately 1 million old master prints
  • Hofburg Palace, a massive complex including Österreichische Nationalbibliothek (Austrian National Library), Michaelerplatz (an archaeological site), Joseph Square, Heldenplatz, Kaiserappartements (see the image below)
  • Austrian Parliament Building, completed in 1883 & still used today
  • Rathaus (town hall) also opened in 1883. There were a bunch of massive screens setup for people to watch the Euro Cup, we came here on Thursday night to watch the Germany/France game
  • Burgtheater, a theatre built in 1888
Google Maps view of a few of the places I visited

The final stop for the day was Stephansdom (St Stephens Cathedral), one of the larger churches in Vienna (the bell there is the largest in the country and weighs just over 20 metric tonnes). The original church on the site was consecrated in 1147 and the cathedral in its current form was finished in 1359 (some parts are still from the old church).

The one place I did pay to go into on Wednesday was the katakomben (crypts) at the cathedral. The crypts have been there since the 13th century, and everyone who died in the town used to be buried down there. There are remains from 11,000 people (400 people per room) buried under the church over 30 years until 1783 until the smell grew too strong to run masses and they also ran out of space. When they ran out of space they had prisoners empty out full rooms, clean the bones and stack them neatly in ‘bone houses’ so they used less space. We weren’t allowed to take pictures down there, but there were rooms stacked floor to ceiling with all sorts of bones, though skulls & femurs were the most recognisable. Duke Rudolph IV is in the crypt, who died in 1365 (his coffin was replaced in the 18th century as the old one was falling apart).

The final interesting fact from the crypt is that when a member of the Habsburg family (who used to run the show here, the same family I’ve mentioned earlier) died, there used to be disagreement about where their remains should be placed, as there were three locations that were of particular significance to the family. What ended up happening is that each location got a piece - their heart was sealed in a chalice type thing and sent to one location, their other organs where sealed in another larger container and placed in the crypt at St Stephens, and their bodies were put into a coffin and stored at the palace (I think, I might be wrong on the location). Some of the containers that the organs are in are larger than then others, the guide told us this is because some of them sprung a leak! The leaky container just gets resealed in a larger one whenever it happens. Apparently it happened a few years back and they had to close the crypts for a week because of the smell.


On Thursday afternoon I visited Kaiserliche Schatzkammer (the Imperial Treasury).

The treasury was split into two sections, secular and ecclesiastical. There were a bunch of interesting things in there. In no particular order:

I also walked past this store on my way home:

I guess marijuana is legal in Austria!


On Friday I went to Seegrotte Hinterbrühl. “Hinterbrühl” was an underground gypsum mine until 1912 when a blasting operation in went awry and 20 million litres of water flooded the mine. It was opened as a tourist attraction in 1930 and has been open to tourists since then, with the exception of World War II. During WWII the mine was used as a factory for Heinkel He 162 jet fighters during, there were 2,000 people working down there as the underground site couldn’t be bombed.

Currently 50,000 L of water have to be pumped out every day to keep the water level constant. The water is super clean and apparently drinkable, though very mineral heavy. It was also surprisingly cold down there at only 9 °C. The guide was doing his thing in German, but I heard someone else translating for their friend and asked if I could listen in.

Burg Lichtenstein was also nearby. It was originally built during the 12th century, destroyed by the Ottomans in 1529 and 1683, and remained in ruins until 1884, when it was rebuilt. I only realised while doing some reading to write this email that the family who established Liechtenstein the country (or principality?) took their family name from the castle, and the country is named after the family. The castle wasn’t open for tours, so I just had a walk around there and the surrounding forest. There was a amphitheater built near the castle around 1800 which is now all overgrown, it was surreal walking through it.

You can see almost the whole structure in the background of the image below.


I got chatting to the two people I was eavesdropping on at the caves and they recommended going to Schneeberg mountain south of Vienna, so I decided to do that on Saturday.

Getting there was a bit of a debacle - I was on the train which was meant to be going all the way to my destination and we’d been stopped at a train station for a while, which was odd. Soon enough a ticket inspector wandered through the train and said something to me in German which I didn’t understand. After I made it clear I didn’t speak German, he just said the destination station I was going to, and I nodded. He then pointed at a train on the other side of the station and said one of the only German words I know: “schnell, schnell!”. “Schnell” is roughly “quick”, which was enough instruction for me. I galloped and hopped on the other train just before it left.

Eventually I made it to Puchberg am Schneeberg, which is at the foot of the mountain. I’d been planning on maybe hiking up the mountain but I didn’t have enough time so I caught the ‘Schneebergbahn’ train up to the top. The track up is a cog railway that was built from 1895-1897.

There was still a decent walk up to from where the train station is to the peak, and I didn’t have loads of time, so I powered from Berghaus Hochschneeberg (1800m) to Klosterwappenhohle (2076m) and Kaiserstein (2061m) and then back:

(the map above is from OpenStreetMap, which is an open source alternative to Google Maps and often has more detailed walking/hiking/biking tracks).

I was a little underprepared for how windy and cold it would be up there (there is still some snow that hasn’t melted yet). Here is me with my hands firmy in the pockets of my inadequate jacket:

The cold was worth it though, the views were amazing:

BFPG talk - Functional Programming in Scala Chapters 7 & 8

In May, I presented a talk based on Chapters 7 & 8 of Functional Programming in Scala at the Brisbane Functional Programming Group.

The talk explores the design and implementation of two functional libraries, one for parallelism and one for property based testing.

The video of the talk (also embedded below) is now available online at the BFGP talks site, along with a link to the slides.

See http://talks.bfpg.org/past.html for other past BFPG presentations.

-Xlint:unchecked and -Werror for Java projects with Gradle

I was recently working in a codebase where there were chunks of Java code that used generic interfaces from the Apache Commons Collections project as well as java.util Collections in a type unsafe way, even though the interfaces/classes that were being used supported generics.

Our gradle build was emitting the following warning:

:compileJavaNote: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

This warning should be an error in my books. It’s possible to get this behaviour by adding the following to your build.gradle file:

tasks.withType(JavaCompile) {
  options.compilerArgs << "-Xlint:unchecked" << "-Werror"
}

This way, when our code is built everyone is aware when they’re using unsafe operations, and can either fix the issue or supress the warning with @SupressWarnings("unchecked") if it’s intentional.

Johannesburg & the ThoughtWorks Pan Africa Away Day 2016

I’m back in Australia after a quick trip to South Africa to attend the ThoughtWorks Pan Africa Away Day 2016.

I left on Tuesday morning, and was early to the airport in Brisbane so I got on an earlier flight to Sydney before flying to Johannesburg. The flight from SYD-JNB was good, it was the first time I’ve flown with Qantas internationally and I was pretty impressed. I was following the sun so by the time it got dark here I’d been in daylight for about 20 hrs which was a very long day!

ThoughtWorks SA had organised a pickup from the airport and the hotel, so a driver picked me up from the airport. On the way to the hotel he told me about how different areas had different races living in them during apartheid. Some nicer looking houses have very serious security, but apparently home invasions are becoming less of a problem. There were still some questionable characters in parts though so I’m sure home invasions still happen, it’s interesting how much the crime rate varies depending on who you talk to.

I spent Wednesday in the ThoughtWorks office. It’s a nice office and much bigger than Brisbane despite having a similar number of people working out of it. I met some of the locals and another traveller here for the away day from Brazil. All up there were 32 international visitors, some there doing talks, some attending like I was and a lot from ThouthWorks leadership/management. The guests were from Brazil, China, Ecuador, Germany, India, Kenya, Singapore, Turkey, UK and the US.

On Thursday we did a tour of Soweto, an area in Johannesburg. First we walked through some of Motsoaledi, an ‘informal settlement’ (a.k.a. shantytown/favela). There are around 8,000 people living there - you should be able to pick it out on Google Maps. One thing I found pretty crazy in all these areas is how much Coca Cola sponsors things - most people there don’t have running water, but there are Coke signs everywhere!

Coca Cola sign in Motsoaledi

From there we went to Vilakazi Street, which is the only street in the world to have two Nobel Peace Prize winners living there - Nelson Mandela and Desmond Tutu. Mandela’s house is a typical government built house from that era, a very basic four bedroom place. It’s now a (small) museum:

Panoramic shot of Mandela's old house, showing that it's now a museum

After reading some of what he and his family put up with, it’s pretty amazing he was as forgiving as he was when was released from jail!

We also went to the Hector Pieterson Museum which is all about the anti-Afrikaans Soweto Uprising - in 1976 some politician decided that all schools (where students were already struggling with English) would now run lessons in Afrikaans. A whole load of students refused to go to school, and lead a march and the police reacted pretty brutally - 13-year-old Hector Pieterson was one of the first to be shot dead.

On Friday we left to Khaya iBhubesi, the venue for the Away Day. Despite the name translating to ‘home of the lion’ there wasn’t a lot of wildlife around, though there were some lions there in an enclosure.

Friday and Saturday were mostly talks from ThoughtWorks Global and Africa leadership. There were events on Friday and Saturday night too, so I didn’t get a whole load of sleep (though I think that made jetlag easier to handle when I got back; I slept the whole flight back and then the whole night on Monday too!).

On Sunday we drove back to Johannesburg and then I went with two people from the Ecuador office to the Apartheid Museum. It’s crazy how arbitrary the laws were in that time!

Sign showing that aspects like which sports someone played where used to detmine their 'race'
Sign explaining how in 1985 at least 1000 people 'changed race'

After the museum I was off to the airport.

It was a really good trip even if it was a bit quick. It would have been good if I had more notice and could plan to visit other countries in Africa, but I guess that will have to wait until next time!