2010 in review


Apparently, the stats helper monkeys at WordPress mulled over how this blog did in 2010, and produced an overall summary of how it performed during the year. Although reported as ‘healthy’ (I wonder what that means?), it’s clear I need to write more in 2011.

Healthy blog!

The Blog-Health-o-Meter™ reads This blog is on fire!.

Crunchy numbers

Featured image

The average container ship can carry about 4,500 containers. This blog was viewed about 19,000 times in 2010. If each view were a shipping container, my blog would have filled about 4 fully loaded ships.

In 2010, there were (only) 6 new posts, growing the total archive of this blog to 39 posts. There were 12 pictures uploaded, taking up a total of 529kb. That’s about a picture per month. 2011’s new year’s resolution is to triple that figure, making at least three posts per month.

The busiest day of the year was November 30th with 123 views. The most popular post that day was How to build a web connected gas meter with your Arduino.

With this in mind, I’ll be trying to make a few more posts on the Arduinometer project this year, and I’m already working on a version for the Netduino.

Where did they come from?

The top referring sites in 2010 were arduino.cc, jtlog.wordpress.com (thanks, James!), mbed.org, code.google.com, and homesenseproject.com.

Some visitors came searching, mostly for arduino gas meter, phototransistor arduino, arduino traffic light, cny70 arduino, and arduino phototransistor.

Attractions in 2010

These are the posts and pages that got the most views in 2010.


How to build a web connected gas meter with your Arduino April 2009


Reading a gas meter with an Arduino, Part 2 February 2009


Connecting Windows 7 Media Center to your TV with the Acer Revo R3610 February 2010


Reading a gas meter with an Arduino, Part 1 February 2009


How to make your Xbox 360, Windows Home Server, Windows Media Centre and Windows 7 work together seamlessly October 2009
1 comment


Connecting Windows 7 Media Center to your TV with the Acer Revo R3610


With Windows Home Server and several Xbox 360’s, some Windows 7 PCs and some TV Tuner Cards, you’d think it’d be easier than it is to get a seamless integrated media experience that’s both fast and reliable on my HDTV. In theory, it should be – but in reality, my experiences have been somewhat different.  

VESA mount-it, stand it up, or lay it flat


 The vision  

Recently, I ditched Sky+, a subscription-based satellite TV service that comes with a personal video recorder and subscription TV service in one package. The PVR element is actually pretty darn good: very quick, responsive and the guide functions are adequate. The interface is a bit bland, but it is responsive and clear – and that’s what really counts. However, we realised that we just weren’t watching enough of the actual subscription channels (Sky 1, for instance) to warrant the monthly cost (no point paying for what you don’t use, right?). The trouble with ditching the service is, the PVR functionality is also disabled – which means no more ability to pause Live TV, or schedule programs to record. Darn.  

What I wanted, then, is to be able to use Media Center (a better product than the bog standard Sky+ box will ever be), with Digital Terrestrial TV (free-to-air). Media Center also allows you to watch and consume digital content stored on the rest of your network. Combine this with the HP Media Smart Windows Home Server’s ability to stream media, and you have a winning combo. To satisfy this need, I wanted a PC directly connected to the main TV in our living room, as my experience with using the Xbox 360 as an extender to my Win7 Media Centre box just didn’t cut it performance-wise.  

In addition to the PVR element, I also wanted a device that would enable me to consume the other digital content stored on our network: and the Sky+ box just can’t do that. Likewise, I can’t access recordings stored on the Sky+ box on my home network (nor could I back them up). So, the more I looked at it: the more Sky+ had to go.  

In moving toward a more connected, content-oriented home, there had to be a better way. And, at long last, I believe I have found it.  

My new setup: the hardware  

  • Acer Revo R3610
  • Windows Home Server (obviously!)
  • PlusLink Dual DVB-T USB tuners
  • Windows 7 Home Premium (for Media Center)

The Acer Revo was the key that unlocked everything and made it all possible – but out of the box, it isn’t configured in a way that was an exact match to my requirements. The model I purchased came pre-installed with 2GB RAM.  

Upgrading the Revo  

To get the performance I desired, upgrades were essential. I purchased the following extras:  

  • 2GB RAM upgrade from Crucial UK
  • OCZ 120GB Solid State Hard Disk

The result is a system that is simply stunning. It’s ready to boot from cold in just 30 seconds, and takes around the 15 second mark to resume from hibernate. It plays HD (1080p) content from TV channels, or from media streamed from the Windows Home Server. Plus, using the “Live TV” function in Media Center acts exactly as it should: it is swift and responsive.  

This is basically Sky+ on speed, using Media Center’s beautiful and clutter-free user interface with direct connection to the rest of the network which enables us to enjoy all the digital content we create.  

Now, even with Freesat and Digital Terrestrial TV (which gives us over 100 free channels, many of which are very good, particularly the BBC ones), we can now watch and record HD content speedily and consume that same content elsewhere on our home network.  

You can ditch the Sky+ subscription and still access Sky TV content  

Windows Media Center is just a modern wonder of the world. A recent update to WMC means that you can now access Sky TV content over the internet, with programmes directly listed inside the Programme Guide. You then have the option of renting the programme with prices starting from 99p. Pretty cool – so I really can ‘have my cake and eat it’.  

What did it all cost?  

Not including the Samsung Series 7 46” LCD TV it is connected to, the Acer Revo R3610 from Amazon.co.uk was £239.99. A 2GB RAM upgrade from Crucial UK cost £34.59 and the 128GB Kingston Technology SATA SSD was £168. The TV Tuner was an impulse buy from Maplin Electronics some time back and cost £24.99.  

At the end of the day, my ‘dream media setup’ cost £469.  

The added advantage as well is that we get a lightning quick Windows 7 PC connected to the TV via HDMI – so other digital content, Youtube, and the like, even iGoogle, is just a click away.

How to install Windows 7 from a USB pen drive


I’ll show you how to create a bootable USB pen drive preloaded with Windows 7 installation media

If, like me, you’ve been eagerly awaiting the official release of Windows 7, you’ve no doubt wanted to install it on just about everything you have. We have a couple of Acer Aspire netbooks: fantastic, highly portable machines but, not fantastically powerful. Windows 7 boasts better performance on lower-spec hardware than it’s predecessor, so putting Windows 7 on the netbooks seems a logical choice.

It took about 12 minutes to install Windows 7 Ultimate from my USB pen drive to my Acer Aspire netbook

A while ago I blogged about how to install Windows Vista on your Aspire A150, so I thought now it would be a good time to update those instructions for Windows 7 users. Thankfully, the process is much more straightforward for Windows 7.

In case you’re wondering why you’d want to install from a USB pen drive, and not the DVD, consider these points:

  1. Your laptop/netbook might not have an optical drive
  2. Keeping the media on USB key is far handier than carrying the DVD around
  3. Installations are typically much faster

Before you begin, you’re going to need:

  • A spare USB key/pen drive
    • I used a ByteStor 8GB pen drive from Amazon. Just about any type of pen drive will work – but you will need one with a minimum of about 4GB.
  • Your Windows 7 installation DVD (or the downloaded ISO from MSDN).
    • If you downloaded as an ISO, you’re going to need software to ‘mount’ the ISO first. See Virtual CloneDrive (free).

Step-by-step instructions

Ok, to get started – you need to make your pen drive ‘bootable’. That is, your computer needs to be able to recognise it as something it can boot from, and that’s not something yours will do without a little bit of prep work.

To get started, open a command prompt window ‘as administrator’, i.e. right click the command prompt icon and choose “Run as administrator”. Then perform the following steps:

  • Plug in your USB pen drive. Make sure the contents are backed up to your hard disk somewhere, first. This process will erase the data on the flash drive.
  • Type the following. After each line, press the RETURN or ENTER key to execute the command you have just entered:
  • Read the list on the screen. Figure out which ‘Disk ###’ is your pen drive. Look at the size of each drive listed – you should be able to figure it out by that. Note the disk number.
  • Now, type the following. After each line, press the RETURN or ENTER key to execute the command you have just entered. Please note: it is extremely vital that you note the correct disk number from the previous step and enter it correctly below. If you have chosen the wrong drive, the drive you mistakenly chose will be rendered unusable.
    SELECT DISK (type your pen drive number here, without brackets)
  • Now, your pen drive begins to format. This took about 10 minutes on my 8gb drive.
  • When formatting has completed, type:

Ok, that’s the hard work out of the way. At this point, you need your Win7 installation media. If it is on an ISO, mount it and make a note of the drive letter of your virtual drive. If it is a physical DVD, insert it into your computer and again, note the drive letter. Now, go back to the command prompt window and do the following:

  • Type:
    CD [your drive letter]:\          --- For example: CD D:\
    BOOTSECT.EXE /NT60 U:             --- (replace 'U' with your USB pen drive letter)

That’s it – you’re done in the command prompt. All you have to do now is copy the entire contents of your Windows 7 installation media across to the USB drive. Quickest way to do this is to open My Computer, open your DVD/Virtual DVD, press CTRL+A and then CTRL+C. Now go back to My Computer, open your USB pen drive, and press CTRL+V. When the copying has finished, you’re left with a bootable USB pen drive that contains Windows 7.

How to build a web connected gas meter with your Arduino


A few months back, I bought a Current Cost electricity meter, hacked that and started pushing the data up to Pachube and displaying real-time electricity usage right here on my blog. But, electricity is only one part of the picture – we also use gas for our heating and hot water systems, and I wanted to track our usage of this too. The catch, of course, is that there doesn’t appear to be a consumer product on the market to do this for me, and I really wanted an excuse to go out and buy an Arduino and start playing with that.

My goal for this project was to hook the gas meter up to Pachube, using EEML as the format:

<eeml xmlns='http://www.eeml.org/xsd/005' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://www.eeml.org/xsd/005 http://www.eeml.org/xsd/005/005.xsd'>
<location exposure='indoor' domain='physical' disposition='fixed'>
<name>London, United Kingdom</name>
<data id='0'>
<tag>gas</tag><tag>cubic metres</tag>
<data id='1'>

What follows is how I set about using my Arduino, an Ethernet Shield and various other parts in order to build the gas meter!


Those of you who have been following my previous blog posts will know that I’ve been working on this for a while, finding a few minutes spare to tinker as and when I can. This post is the promised amalgamation of all those recent posts.

The completed Arduino Ethernet Gas Meter unit

The completed Arduino Ethernet Gas Meter unit

So, this is the completed unit (picture, left). Whilst this isn’t intended as a complete step-by-step tutorial, my aim is to provide enough information to enable somebody else to build one of these.

To keep things nice and neat, I mounted the Arduino, Ethernet- and Proto- shields into a plastic project box from Maplin. I drilled a ventillation hole and added a mini CPU fan connected to a temperature sensor to help keep the unit cool. I also wanted to add one because it’s nice to tinker around with new sensors and I hadn’t yet played with a temp sensor 😉

How does it work?

The main sensor on this unit is a photo-reflector, which is a fancy name for an infrared LED and an infrared sensor in one assembly. When the infrared sensor detects a reflection from the infrared LED, the strength of that reflection is fed back into the Arduino. I used a pull-up resistor circuit to connect this sensor to a digital input pin, which is switched to LOW when a reflection is detected. Because my gas meter has a little reflective metal disc on one of the dials, this gives me a nice reflection to count when the dial passes.

The Arduino then keeps a tally of all the reflections it has counted, which is accessible in XML (conformant to the EEML standard) over the web via the Ethernet Shield. To keep my meter in synch with the actual gas meter, one can pass a parameter via the HTTP querystring to the gas meter module to set it’s current value (useful, for instance, after a power cut or if you need to disconnect it). Because the unit is accessible over the public internet (without authentication), I only allow the querystring parameter to reset the meter value if a certain digital pin is ‘HIGH’ – a crude (yet effective) kind of physical security.

For fun, I then added a mini-CPU fan connected to a temperature sensor which causes the fan to start up when the temperature inside the unit gets a bit too toasty. It then kicks in until it has successfully dropped the temperature to within the threshold amount. The CPU fan runs off 12v, which the Arduino will happily produce – but it gave me an opportunity to use a transistor to switch the 12V supply on/off based on the state of a digital output pin @ 5 volts.


  1. Before you begin: finding out if this will this work for you!
  2. Shopping list – what you need to buy and where to get it
  3. Constructing the sensor circuit
  4. The sketch
  5. Connect it all up, fine tune and test
  6. Acknowledgements

Before you begin: check your gas meter

Please note: this project involves mounting sensing equipment in a non-permanent, non-invasive way to your household gas meter, based on my experience and research. I strongly encourage you to check for yourself whether these instructions are suitable for you, and, if so, only to proceed if you feel competent enough to connect this unit safely. This information is provided ‘as is’, and you use it entirely at your own risk.

This kit will only work on certain types of gas meter. Firstly, you must have the odometer-style gas meter (these are the ones with rotary dials with numbers on). Secondly, one of the dials, usually the dial representing a 100th of a Cubic Metre should have a little reflective disk between two of the digits (on mine, that is digit 5 and 6). I’ve no doubt that you could probably modify my design here to work with another type of meter, but you may need to change the photo reflector to either a pulse counter or something else appropriate. The underlying code to count the pulses and make the Arduino web-connectable should be the same.

Shopping list

1 x Arduino Duemillanove (or similar) ….. £23.81
1 x Sparkfun Ethernet Shield … £33.35
1 x 9v DC Power Supply with a 2.1mm centre-positive connector (Maplin: GS74R) … £7.99
1 x 220 ohm resistor
1 x 10K ohm resistor
1 x Transistor (if you plan to add the fan circuit and you use a 12V fan)
1 x Fairchild QRB1134 IR Photoreflector …. £2.62
1 x Project Box (eg. Maplin XYZXYZ) …. £2.99
1 x Mini CPU Fan (eg. Maplin) …. £4.99
1 x Breadboard – OR –
1 x Nuelectronics Protoshield …. £4.99

Total cost to build from scracth: £80.74
Total cost if you already have the Arduino, an ethernet shield and a few other bits and bobs: < £20.

You will also need/want the following tools to hand:

  • Soldering iron and lead-free solder (well, use whatever you like, but lead-free is better for you and the environment!)
  • Wire cutters
  • Some suitable wire/jump leads etc
  • A pair of “helping hands” if you have them


Before starting out, I had a quick think about the project’s desired behaviors. That way, coding it up would be a little easier because I’d know what I was supposed to be coding 🙂

Here they are:

  • Connect the photo reflector to a digital input
    • When the input goes LOW, increment a counter
  • Check the current temperature inside the unit
    • When the temperature is above the threshold, turn on the CPU fan.
    • When the temperature falls below the threshold, turn off the CPU fan.
  • Check if a web client is connecting.
    • Read the query string.
    • If the query string value contains “?x=”, change the internal count to the value of x but only when a digital pin is set to HIGH (so web users can’t set it for us!).
    • If the query string does not contain the above element, generate EEML containing the data that we need.

With these points in mind, I started to construct the sensor circuit.

Constructing the sensor circuit and preparing the project box

Ok, so first things first – let’s start by preparing the project box. Drill two holes into the box – one on top, and another on the side (as pictured):

Prepared Project Box

Prepared Project Box

It doesn’t really matter what size you make the hole on the side providing that there is sufficient room to fit a power cable, ethernet cable and the 4 wires from the photoreflector through. The hole on top should be just a shade smaller than the size of the fan that you have so that you can mount it to the inside of the case properly.

Next up, we’re going to construct the sensor circuit board. You can use either a breadboard, or – as I have used – an unassembled protoshield board from nuelectronics. I have used Fritzing to create a diagram of the entire circuit (shown below). I’ve also produced a schematic to accompany the diagram. I’m not quite sure how correct it is though, so be warned! (Corrections on a post-card, please!).

A tidier view of the wiring

A tidier view of the wiring



Start by soldering two wires – one each to the 5V rail and the GND rail respectively. Next, solder the resistors, transistor and temperature sensor onto the board, according to the schematic shown. Take care when soldering the transistor and temperature sensor to the board: the heat from your soldering iron may damage them.

Next, pass the bare sensor wires through the outside hole that you drilled and then solder them onto the board in the posistions shown. Make sure you use enough wire – you’ll want about 11-13cm for each connection you make (you can trim the non-soldered ends later).  Finally, solder the positive and ground wires for the CPU fan onto your board.

If you’re new to soldering (as I am), then do take extra care that your connections are good and don’t bridge multiple points on the board. If you do, you’ll likely create a short circuit and that will drive you nuts, trust me! When you’re done, you should end up with something that looks a bit like this:

The finished sensor circuit

The finished sensor circuit

The sketch

Now that you’ve done the hard part, here comes the copy and paste! Take the sketch below and place it into your Arduino suite. You’ll need to modify the following:

  • Line 13: Set your own unique MAC address
  • Line 14: Set your own unique IP address (accessible from computers on your network)
  • Line 15: Set your router’s gateway address

#include “Ethernet2.h”
#include “WString.h”
#include “stdio.h”

// — [ Pin setup ] —
int sensorPin = 5;
int ledPin = 9;
int fanPin = 7;
int tempPin = 3;
int unlockPin = 8;

// — [ Ethernet setup ] —
static uint8_t mac[6] = { 0x02, 0xAA, 0xAA, 0xCC, 0x00, 0x22 };
static uint8_t ip[4] = { 192, 168, 1, 99 };
static uint8_t gateway[4] = { 192, 168, 1, 2 };
int serverPort = 80;

String url = String(25);
int maxLength=25;

// — [ Variables to control when the unit fan kicks in/cuts out… ] —
float maxTemp = 26.0;
float minTemp = 24.0;

// — [ Variables to store our sensor values ] —
volatile int totalTicks = 0;
float tempc = 0.0;
int maxi = -100, mini = 100;

// — [ Misc. vars ] —
float inputVolts = 5.01;
int previousState = -2;
int delayMs = 1500;
int i;
boolean lock;

Server server(serverPort);

void setup() {
pinMode(ledPin, OUTPUT);
pinMode(fanPin, OUTPUT);
pinMode(sensorPin, INPUT);
pinMode(unlockPin, INPUT);
previousState = digitalRead(sensorPin);
Serial.begin(115200); // Use serial for debugging locally…
Serial.println(“Ardugas server saying: Howdy!”);
Ethernet.begin(mac, ip, gateway);

void loop() {
checkUnitTemp(); // Take action based on unit temp
checkSensor(); // Check the gas meter sensor
getCurrentTemperature(); // Get the unit temperature
listenWeb(); // Handle any web connections
digitalWrite(ledPin, !digitalRead(sensorPin)); // Light LED if sensor is LOW

// Serve pachube EEML and accept a querystring param to set the current value
void listenWeb() {

boolean read_url = true;
boolean unlock = false;

Client client = server.available();
if (client) {

Serial.println(“Ethernet client connected…”);

// an http request ends with a blank line
boolean current_line_is_blank = true;
int valuesChanged = 0;
while (client.connected()) {

if (client.available()) {

char c = client.read();
if (url.length() < maxLength) { url.append(c); } if (c == '\n' && current_line_is_blank) { // send a standard http response header, but change the response type to text/xml client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/xml"); client.println(); // This is our unlock pin. When set to high, we allow the querystring parameter 'x' to force-set our meter value. if (digitalRead(unlockPin) == HIGH) { unlock = true; } if (url.contains("x") && unlock) { Serial.println(url); String v = String(10); int startIndex = url.indexOf('=')+1; int stopIndex = url.indexOf('H'); v = url.substring(startIndex, stopIndex); Serial.println(v); totalTicks = atoi(v); } int t = tempc; // EEML client.println(""); client.println(""); client.println(""); client.println("Ardugas Server"); client.println(""); // Gas Meter Reading client.println(""); client.println("gascubic metres"); client.print(""); client.print(totalTicks); client.println(""); client.println(""); client.println(""); client.println("temperaturedegreescelsius"); client.print(""); client.print(t); client.print(""); client.println(""); client.println(""); client.println(""); client.println(); break; } if (c == '\n') { // we're starting a new line current_line_is_blank = true; } else if (c != '\r') { // we've gotten a character on the current line current_line_is_blank = false; } } } // give the web browser time to receive the data url = ""; delay(5); client.stop(); } } // Switch the cooling fan on if it's too hot! void checkUnitTemp() { if (tempc >= maxTemp) {
digitalWrite(fanPin, HIGH);
if (tempc maxi) {maxi = tempc;} // record max temperature
if(tempc < mini) {mini = tempc;} // record min temperature } // Count sensor values void checkSensor() { int currentState = digitalRead(sensorPin); if (currentState == LOW && previousState == HIGH) { if (!lock) { lock = true; delay(delayMs); totalTicks++; } } if (currentState == HIGH && previousState == LOW) { lock = false; } previousState = currentState; } [/sourcecode] Attach the Ethernet Shield to your Arduino, attach your sensor circuit, upload the sketch and then test it out according to the behaviours mapped out above. For testing, I used a a square of foil and passed it under the sensor. This should cause the sensor pin to swith to LOW, and increment the counter by one. To test if your cooling fan circuit is working, change the threshold values in the sketch above. Connect it all up, fine tune and test

Now for the exciting bit… it’s time to connect it up to your gas meter. Now, my gas meter was really quite awkward because there is a curved plastic bezel cover over the meter dials, which made it had to find the best point to get a reflection. That is, in the end, why I opted for a very sturdy and reliable ‘blu-tac’ mount! I think I’ll definitely replace that with a bracket at some point in the futre though.

 [Photo to follow shortly]

Now, connect up your circuit. Make sure you’ve got your test LED inserted into the ledPin you defined in the sketch. This will light up when your sensor detects a reflection. At this point it would be good if you have someone to help you by turning your hot water on/off, or, turn your gas hob or heating on for the duration of the setup. The object here is to have the dial start to turn so that you can find the best position for your sensor. Begin by holding the photoreflector just over the dial with the reflective disc. Wait for it to turn one revolution. The LED should light when the sensor detects a reflection – so make sure that it only lights up when the dial is directly underneath it. As the disc approaches the sensor, there is a period of ‘noisy reflection’ that my sketch accounts for by forcing a delay after the first detection. This prevents artifical inflation of the meter count.

Once you’ve found the ideal position, firmly fix it in place – I used blu tac quite successfully but you can use whatever you need to, providing it doesn’t pierce or physically interfere with the meter in any way. Now that it’s attached, you need to program your arduino with your current gas meter value.  To enable this, you must first connect a jumper lead from 5V to resetPin. Then, browse to the IP address you set, but add the querystring value ‘x=[your meter reading]’. For example, to set a meter reading of 894.121, and your IP address is, your URL would look like:

So, that’s it! I’ve been sitting on this article for about a week now, but due to work and other commitments I’ve not really had as much time as I’d have liked to work on it – so I thought I’d just get it out there and take as much feedback as possible from my readers to help improve it.

I hope you enjoyed reading and that you can derive some use from this.


Just enjoy the snow!


It’s not often we’re blessed with snowman-grade snow in the South-East. Especially snow that warrants a Met Office Severe Weather Warning. In fact, the last time it snowed like this down in the South-East was – correct me if I’m wrong – about 18 years ago.

That long ago, I remember helping my Dad dig his car out of the snow, and building snowmen in the garden. What this weather has brought many is the opportunity to stand still for a short while; a brief period in our busy lives to stroll down the road, admiring the pretty white stuff that has made everything so, well, pretty.

What’s sad about this awesome weather event though, is not that it has caused so much travel chaos, but that so many are seeking to blame someone for the fact that the roads almost ground to a halt, all London buses were canceled and the trains stopped working. Really what these people are suggesting we do, when they compare our capital city’s response to countries such as Russia, Sweden and Canada is anyone’s guess. Do they really think we should pay good tax money into a pot each year just so that we are prepared for the once-in-every-eighteen-year event, that lasts just one day? And besides, the roads really were trecherous – and where I live, we saw gritters all day long – and it didn’t really help, the snow was coming down so heavy and so fast.

And, while I’m ranting, did these people all miss the weather warnings in the days beforehand? If it caught you unprepared, I really don’t know how. It was all over BBC News, Sky News and the radio. And, the Grape Vine. Why not just enjoy it while it lasts? Whether you like going outdoors in the snow or not, time to think is a rarity for most people these days, let alone some pretty scenerey for us inner-city larks. My fiancé and I went for a nice long morning stroll through the park, before we both started work at 8am. And that gave me the perfect opportunity to snap some snow pics (I’ve not had a chance to correct the lighting in these yet, so please bear with me!).

I, for one, was glad of something different for a change – especially something so pretty!

Chocalate Cake In 5 Minutes


Very rarely do I blog about anything not connected, in some way, to a computer. At the very least, it should have a plug attached to it. This post breaks that tradition…

A friend of mine sent me a link to another person’s blog, which describes a recipie for making a Chocalate Cake in 5 minutes, using nothing but a mug, some basic ingredients, and a microwave. What a miraculous discovery!

Thank you to Dizze-dee for sharing this awesome recipie! 🙂