Month: April 2021

Let’s make Rouladen!

When you’re living the expat life, I don’t see a lot of point in only eating the things you did back home. If you didn’t want to try new things, what was the point of leaving in the first place? When I did a semester in London in college, I remember one girl would only eat from American fast food restaurants, and I was livid that she took a spot from someone that would have appreciated the experience more. I swore that would never be me. So when we got to Germany, I spent some time researching classic German dishes that we could try to recreate.

Rouladen was one of the first*, and I’ve made them several times since. They’re rolled up beef parcels with bacon, onions, mustard, and pickles. Um, YUM. After my first attempt, I bought special Rouladennadeln, little metal skewers you can use to secure the rolls without having to tie them with string. I figured I’d document in case you’d like to try it yourself!

Ingredients

I’ve used a few different recipes I found online, but the most recent was this one from Edeka (our local supermarket). In addition to the beef (more of that in a second), the main ingredients are mustard, pickles, onions, sliced streaky bacon (I used this thin smoked ham), carrot, parsnip (or “parsley root”), leeks (I subbed in some very chunky green onions), and celery (mine is defrosting as the Snook likes to freeze pre-chopped baggies of it).

Rouladen

Here’s the beef itself. My understanding is that it’s slices of topside or silverside. Pretty much every German meat counter has a hunk of beef sitting there marked “Rouladen” and the butcher will happily slice off bits for you. My local store actually has pre-sliced bits wrapped up in cellophane, so I grabbed four of them. They were so large that I actually sliced them in half, into 8. If your slices are thick you can pound them thinner, but these were close enough to the recipe’s 0.5cm that I didn’t bother.

Prepping the Rouladen

You start by spreading some mustard on each of the pieces of beef, then sprinkling with salt and pepper. Then you layer on the bacon, onions, and pickle. Technically this recipe wants you to slice the onion, but I misread and minced mine as a previous recipe had had me do. I think I’ll try the slicing next time, as I’m guessing it’s easier to keep the onion inside when you roll them up. For the pickle I sliced each one into quarters. Another recipe also had me used thin carrot sticks too, but this one left them out.

Rouladennaden

Those are my Rouladennadeln (roulade needles). Fun, huh? Time to roll up the Rouladen.

Rolled up Rouladen

Look, I’m obviously not a 70-year-old Bavarian Grandmother who’s been doing this her whole life, but I’m pretty proud of this, okay? 😊 You can also tie them up with kitchen string, or use toothpicks to secure. (That’s what I did the first time, but it’s hard to keep the toothpicks from breaking.)

Prepping veg

Now to prep the veg. Everything is chopped up into little bits.

Browning the Rouladen

Now it’s time to brown the Rouladen in some oil. I used our cast-iron casserole, but you could also just use a big pot. I only did a few at a time and tried to let them get a nice bit of crust.

Cooking the veg

Once you’ve browned the meat and set it aside, you dump all the veg in the pot and cook it until it softens.

Final ingredients

You need a few final ingredients: tomato paste, red wine, and beef stock. You add the tomato paste to the veg and cook for a bit, then deglaze with the wine. Then you stir in the stock.

Sauce

Nice rich sauce for our Rouladen!

Meat back in the pot

The Rouladen go back into the pot, and the whole thing simmers with a lid on for 45-60 minutes at low heat.

Cooking down the sauce

When the Rouladen are done cooking, you pull them out and place them in the oven to keep warm. Then you strain the veg out of the sauce (and chuck it away!), and let it boil down a little to thicken.

Adding butter

And because “hey, why the hell not, we’re in Germany!”, you further thicken the sauce by whisking in 100g of cold butter cubes. Hells yeah.

Finished Rouladen

Now you can put the Rouladen back in the sauce before serving. I also pulled out the Rouladennadeln at this point.

Rouladen

And that’s it! Traditional German Rouladen.** We served it with steamed carrots and a bit of mashed potato (which had some leftover cabbage mixed in). Very tasty!

* Funny story: I happily announced in a team meeting after my first attempt at this that I’d made “Rolladen” and everybody started laughing. Rolladen are… Venetian blinds. Yeah, don’t mix up the terms. 😂

** I’m sure this is one of those things where there are a million regional variations, so if you’re upset that mine didn’t adhere to your family’s tradition, send me a recipe and I’ll try yours out!

Building the Oscar Contest entry form

As always, I like to use the Oscar Contest as a way to try to learn something new. This year I decided to build it using AWS Amplify, a set of tools and services that can be used to quickly build and host mobile and web apps across a range of frameworks. I’ve somehow managed to avoid touching React, so I figured I might as well use that too. Here’s the basic architecture I went with:

Contest architecture

I figured it might be fun to walk you through the process I used in case you’d like to try something similar. The first step (if you haven’t already) is to install the AWS CLI and Amplify CLI and get them configured with your AWS account credentials. Then I created the basic React project using this command:

npx create-react-app oscars2021

That will download a bunch of stuff and set up the basic project files for you.

You can then switch into that directory and start the app to verify it’s working.

cd oscars2021
npm start

Running React app

Now it’s time to hook your project up to Amplify, using this command:

amplify init

A wizard will walk you through setting up various parameters for your app, including your preferred code editor and the type of app you’re building. Here’s what I selected:

Amplify configuration

This will initialise your project in the cloud and set up some resources for you.

Now it’s time to add storage, which in my case meant an Amazon DynamoDB table. This is where I’d be storing each entry as it came in.

amplify add storage

This will again kick off a wizard that will walk you through some configuration options. I selected “NoSQL Database” and then set up the columns that I wanted in the table.

Database config

I also selected “id” as the partition key, with no sort key, no secondary indexes, and no Lambda trigger.

More DB config

The next step is to add the API and Lambda function that will actually record the user’s entry. This is done with the command:

amplify add api

Again, a wizard will walk you through configuration. I created a REST API with the path “/entry” and created a new Lambda function using the Serverless ExpressJS template. I also gave the function permission to Create and Read from the storage (aka DynamoDB table) we just set up. I didn’t restrict access to the API, as I want anyone to be able to enter.

API configuration

Time to actually update the Lambda function! I went into my preferred code editor (Atom) and opened the project. The function is located in “amplify/backend/function/oscarsfunction/src/app.js”. There are some commented example methods that I deleted and replaced with the code below. This adds the AWS SDK (so I can save to DynamoDB), a method for generating random IDs, and the actual post method to save the entry. (You can download this code from my Github project here.)

Function code

The next step is to use Amplify to push the newly created backend storage, API, and function to the cloud! You can do this with the command:

amplify push

Amplify will ask you to confirm which resources you’re deploying, and then it will start the process using AWS CloudFormation. This can take a little while.

Amplify push

If you make any changes to the function code later, remember to push the changes to Amplify so they are uploaded to AWS! In the meantime, it’s time to install some dependencies I need for the form frontend.

npm install aws-amplify @aws-amplify/ui-react
npm install bootstrap
npm install react-bootstrap

Once all that’s done, you can finally edit the form! The actual React app lives in “src/App.js”. I won’t go through everything I did (you can check the code out yourself), but basically I made sure to include Amplify (so the frontend can talk to the backend) as well as React Bootstrap. I also tweaked the CSS and added a couple images. Each time you save a change, the app will recompile and update in your running browser window. I also opened the “public/index.html” file and changed the title and description of the page.

Form code

You can also test out the form in the browser to ensure it’s working. When I opened the AWS Console and looked in DynamoDB, I could see entries being saved correctly into the dev environment table. 🎉

The final step is to deploy the frontend, and Amplify makes this pretty easy too. I created a new repo at Github and then pushed my code to it.

Github create repo

Then I went to the AWS Amplify console and clicked on my app. If you click on the “Frontend environments” tab, you’re presented with a range of options for hosting your app.

Frontend hosting

I clicked the one for Github and then went through the process of granting access to my Github account. Then I selected the repo I’d just created with the code for my app, and left the branch set to “master.” On the next screen, I left checked the option to “Deploy updates to backend resources with your frontend on every code commit” and created a new “prod” environment as the target. I also had to create a new IAM role for the deployment process. Once you save and deploy, Amplify will grab your code from Github, run the build script and any tests you’ve configured, and deploy the resources into your account. The build for my app takes less than 4 minutes to complete.

Completed deployment

The beauty of the CI/CD pipeline is that whenever I modify the code and push it to Github, the whole process will kick off automatically! The Amplify console also gives me the URL to the hosted app, which is where you can enter the contest. When I check DynamoDB now, I can see entries coming through to the prod environment table. When the contest is finished, I can shut down and remove all the app resources by simply running this command:

amplify delete

If you’d like to try out Amplify yourself, I can recommend a couple resources. The AWS website has a very simple, step-by-step tutorial to Build a Basic Web Application that you can work through, but it doesn’t include React or the CI/CD part. If you want to copy what I did, check out my colleague Marcia’s YouTube videos  on  building a Contact form with React and automating your CI/CD deployments, which gave me the basics of everything I needed to build the contest entry form. Thanks Marcia!

Ew, David.

The thirteenth (semi-)annual Web-Goddess Oscar Contest has officially launched! 🎉 And this year you can win everyone’s favourite family – the Roses of Schitt’s Creek.

Rose Family Sock Monkeys

No, I know they don’t have anything to do with movies. But honestly, I didn’t see many of the nominated films last year, and Schitt’s Creek brought me the most joy of pretty much any media. So that’s what I went with, and that’s what you win if you predict the most Oscar winners!

Go here to read the rules and ENTER! Contest has now closed!

More details on the monkeys:

  • David Rose’s outfit features a custom knit black sweater with embroidered white lightning bolts, as well as custom knit designer sneakers. The sneakers were based off the Little Converse pattern, while the sweater was made up entirely by me. He’s also wearing a pair of black framed spectacles (intended for an American Girl doll!).
  • Alexis Rose’s outfit is based off her iconic “A Little Bit Alexis” performance, including a dusty pink minidress and knee-high boots. She’s also got her iconic A necklace.
  • Johnny Rose is wearing a bespoke tailored suit, sewn by me from a pattern intended for American Girl dolls. (No joke – I paid $10 for it. 😳) He’s also got felt eyebrows for the perfect Eugene Levy touch.
  • Moira Rose is wearing an avant garde tunic dress made by me from sheer sequinned fabric and designer high heeled boots. She also has matching feather glitter earrings. And what would Moira be without her girls? You get four different wigs (attached with Velcro) to complete the whole wig wall scene.

If you want Steve, Patrick, or any of the other Schitt’s Creek residents to recreate the scene, that’s all on you. 😂

So go ahead and enter! The 2021 Academy Awards happen on Sunday, April 25th (California time), which is like 2am here. So I’ll cut off entries a few hours beforehand when I go to bed, and you’ll have to wait until I get up in the morning to find out who won!

Web-Goddess Oscar Contest Sock Monkey History

Eighteen years ago (good grief!), I thought it would be fun to run a contest and give away a sock monkey. I then kept that up for 10 years running, and you can see the history of my creations below. These days I only do it when the inspiration strikes…

2021 – Schitt’s Creek Sock Monkeys
2019 – Freddie Monkcury
2013 – The Avenger Monkeys
2012 – The Monkey with the Dragon Tattoo
2011 – Black Swan and White Swan ballerina monkeys
2010 – Sparkly Emo Vampire Sockmonkey playset
2009 – Batman and Joker monkeys
2008 – Striking Writer Monkey
2007 – Trio of Dream Monkeys
2006 – Gay Sock Monkey Cowboys
2005 – Soctopus
2004 – Plain sockmonkey
2003 – Oscar the Sock Monkey

Coming soon…

It’s that time of year again…

A Trip to the Supermarket

You all seemed to really like my cost of living post, so let’s dive into something equally as mundane – German groceries and supermarkets!

If you follow me at all here or on social media, you know that the Snook and I enjoy cooking and make a lot of things from scratch. Back in Australia, we even renovated our kitchen so we could get in a bigger fridge/freezer. Our normal process was that every Saturday I’d plan out the menu for the week and then we’d both go to the store to do a single weekly shop. We also got a veggie box delivered every two weeks as well. A couple of times a year we’d go to Costco and stock up on bulk things, and we’d also hit up the Aussie Meat Emporium every now and then to stock the freezer with meat. We’d generally cook probably 4 or 5 days out of 7, freezing any leftovers. We’d usually alternate who cooks, though since I made the menus I’d usually assign the really elaborate things to Rodd. 😉

Once we got to Germany, we realised pretty quickly that this system was going to have to change. The main problem is that German kitchens (at least the ones in apartments) tend to be smaller and have less storage space than we were used to. The AirBnB we were in for the first 10 days had only a bar-fridge and barely any pantry space! When we started looking for apartments, we deliberately looked a place with the biggest kitchen and fridge we could find. The one we got is great, but it’s still smaller than back in Sydney. We’ve got two cupboards to use for dry goods, a couple small shelves over the stove for spices, and then a stacked fridge/freezer.

Kitchen

We tried for the first few months to stick to the once-a-week Saturday shop but we’d struggle to store everything. We also tried out a veggie box delivery service but had the same issue, trying to figure out how to cram most of it in the fridge. The solution, it seems, is to do smaller shops, more frequently. How very European! 🥖

Our current process is to shop every 4-5 days (avoiding Sunday because everything’s closed here), and we take turns making the menu and going to the supermarket. One nice thing is that there are so many options within walking distance of our place. The main supermarket brands here in Munich appear to be Edeka and Rewe (analogous to Coles and Woolies back home), and there are like four Edekas of various sizes in the neighbourhood. For discount stuff there’s also Aldi Süd (different Aldis depending on which part of Germany you’re in!), Lidl, and Penny. There’s also Amazon Fresh for same-day delivery, which was a life-saver when we arrived! We’ve also found a couple Asian and Turkish groceries nearby for specialty items. Germans are big on organic, so there are also Alnatura organic supermarkets and a few farmers’ markets around too (though they’re mostly shut down due to Covid). And if you’re curious, we’re still mostly under lockdown here so current rules are you have to wear an N95 mask in any shops.

But anyway yeah, a plethora of options. Our default is the Edeka in Theriesenhöhe, just a short walk across Bavaria Park, mostly because it’s the closest and we’ve got a good feel for what’s available. (Aldi/Lidl always feels more hit and miss with what’s in stock.) It’s not huge, but they really pack in a lot of stuff! After seven months, we feel like we’ve mostly got it figured out. A lot of stuff is the same as in Australia, but there are still some wacky differences we’ve found. Read on for lots of pictures and details…

Read more →