VOID: Documentation and Process

VOID started with a bunch of 3D scans. This was the first scan I made whilst waiting at the corner of the void deck for a taxi. The funny thing about this scan was that you got quite a good view of whatever I was looking at, but there’s a empty void behind my two legs, where the scanner couldn’t reach, which makes it look like sootmark traces in the aftermath of an explosion. There are numerous 3D scanning apps available for iPad Pro and it is easy to export the data as an textured OBJ or glTF/glb and the file can be quickly imported into Unity.

Gameplay images from VOID

These days I spend quite a lot of time waiting for taxis to take me and Beano between places. The timing is such that I frequently end up commuting at daybreak or at night, catching glimpses of dimly lit buildings and sleepy carparks through the darkness. The two destinations I frequent (my house and my parents’) are incidentally both what you might consider somewhat complicated places to get to, so there are many opportunities for a grab or taxi driver to become lost or give up the will to find me in the midst of all the one way road systems. So… there is a lot of waiting, during which I’ve ended up scanning void decks, mining it for material…

Void deck waiting area

When Shih Yun first invited me to show something at OTHERWORLDS, I had several other experiments and drafts that I thought of showing, which I realised over time to be unnecessarily complicated. A good game is not a collage. A game does not necesssarily get better from having more elements in it. I realised that I liked my growing collection of Void Deck scans… and I wanted to make something out of all of them.

HDB Scans from Veerasamy Road

The only weird thing about doing this is that after staring at it in a dream-like state within my game for so long, it is kinda weird to still walk through the same corridors on an everyday basis.

An obvious reference for the work is “In the Night Garden”, a show that Beano has been watching a lot of. Some years ago I remember once attending a lecture in the basement of RCA. The details of this lecture eludes me except that the visiting speaker was a new sleep deprived father who had watched a whole lot of “In the Night Garden” recently with their toddler. He apparently had some near-religious epiphany with regards to the philosophical meaning behind “In the Night Garden” and I only have the merest impression that he had meticulously tied it up with an elaborate history of design or critical design or radical italian design pedagogy from the 1970s or whatever it is that RCA design students get lectured to about (and that I was impressed with the mental leaps of the lecture). It thus seems typical that now in my own sleep deprivation of caring for the Bean, I do not recall that useful gem that this forgotten speaker had wished to impress upon us, that rare and useful tidbit that he had gleaned from the watching of “In the Night Garden”.

A Screenshot from “In the Night Garden”

Now as I am watching and rewatching pixelated copies of In the Night Garden via youtube on an old and heavily bumpered ipad, I am only left with questions. WHY IS IGGLE PIGGLE ALONE IN A BOAT AT NIGHT? WHERE IS HE SAILING TO? IS THE NIGHT GARDEN THE FEVER DREAM OF AN IGGLE PIGGLE LOST AT SEA? IS IGGLE PIGGLE ALRIGHT? WHERE EXACTLY IS THE NIGHT GARDEN?

Another reference for this work is a scene from another children’s show – Steven Universe. Years back I used to catch bits of it and I remember thinking that it was way too childish for me (I probably even said something like “I dont know what people see in it!!!”. But when I was on maternity leave I somehow ended up binge watching seasons of it all at one go in the middle of the night. It was when I watched this episode that I was suddenly SOLD on the show, because seeing a nightmare version of the city made me realise that they had done such a good job of painting Beach City to me in the previous episodes. They needed audiences to have built up a good mental map of Beach City before hitting us with a nightmare version of it – otherwise the episode would not have any impact. It is funny that I almost feel kinda nostalgic rewatching old episodes of Steven Universe, because the show now gives me a feeling of Beano being really tiny. I suppose this is the video version of “song that happens to be playing in the background during a defining period of your life”. I really love the thoughtful, gentle way in which the show handles topics such as mental health, parenting, and relationships – and I guess I envisioned it being a beautiful cartoon for Beano to enjoy watching with me, one day in the future…

“Rose’s Room” (Season 1 Episode 19)

In this episode, Steven discovers that his mother’s magical room can fulfill any wish he asks for. After asking it for a bunch of silly things, he is hungry and decides to go get a donut from the shop in Beach City, and he thinks he has stepped out of the room to get a donut, but actually Rose’s room has generated a parallel Beach City. Everyone is speaking funny and he runs to the water’s edge where he finds the waves are not working properly. Finally after a terrifying time in the city, he realises it is a dream when he tries to eat his donut and it poofs.

Enough of the back story, here is the work!


Shao from DUDE.SG combined all our works into the CAVE setup for the exhibition at Gillman Barracks – a 3 screen kinect based interactive virtual environment! The boat was self-propelling, but it would turn according to the direction of the user’s body.

Due to safe distancing measures, the gallery could only accomodate a fixed number of people at one time, so queues outside built up to insane levels. Whilst the show was incredibly short, I heard that there were about 600-700 people who came through each day, so at least we know that many people got to try it!


A few notes here on issues I encountered along the way:

Water in the Boat – Convex Hull

So I wanted to get a boat floating on a sea. I didn’t reinvent the sea, no, if you must ask. I did this version with Crest, an existing ocean renderer system for Unity 2019.4.8 and later. A real boat actually displaces the water, so at first when my boat was in the water the ocean rendered into my boat. The fix is to add a convex hull (take the shape of your box and create a shape which is the smallest solid closed convex shape of itself) and then use a script to disable the rendering of the water where the convex hull is located inside the boat. No more water inside boat.


One thing I’ve blithely not comprehended before was that on a MacBook with Retina display, the pixel density is twice that of the norm, therefore instead of 72dpi it is actually 144 dpi, meaning for every 1px there is actually now 4px (2px x 2px), hence when I take screenshots/screencaptures that do not account for the embedded dpi setting of 144dpi, they will come out twice as big. A crucial issue when trying to screencapture my game as a gameplay video…

Colour / Dropped Frames / Understanding Unity Profiler

Monosnap is the trusty screenshot app I’ve used for several years now. Using it meant that I never had to really think about how I really wanted to compress things, because I just trusted it to quickly crop and compress things for me (whether image or video). However, most of what I’ve been screenshotting with it so far have been things like annotations of images and lectures, for which colour is not much of a big deal. Well, my lazy days are ending. Using it to capture a gameplay video this time around showed me that maybe I need a better long-term solution for gameplay screencapture (possibly even an internal game recorder?) because (1) there is something going on with the colour (probably to do with conversion from 10 bit colour to 8 bit colour, which flatten my subtle purples to black), and (2) there is also something going on with dropped frames, which I am guessing is possibly my macbook pro’s gpu being not up to the task of, so it all points to (3) that I probably need to watch more tutorials on how to properly use the Unity profiler to improve the performance of my game… ¯_(ツ)_/¯


I self-studied for 6 and a half hours to pass the Unity Certification (Unity Certified Associate: Game Developer)

I just did the Unity Certified Associate Game Developer exam and passed it. Aight, I know this is probably going to sound like a HUMBLEBRAG but, I am writing this post because I was originally pretty apprehensive about taking the exam. Although I’ve used Unity for several years, I wouldn’t describe my job role as a game developer. So I worried that what I had done before wasn’t good or “professional” enough. Before the exam, I also furiously googled for people’s accounts of how they studied for it, what exactly they studied, so in case there are others who come after me who are doing the same thing, I thought I’d add a description of my experience and what I did to pass!

I know that the Unity Certified Associate is considered the “entry-level” certification, but even if its the entry-level test, it still needs some studying! Besides my artistic endeavours (which this blog is mainly about) I actually work a full-time job (and not as a game developer), but Unity happens to be something that my work would like me to focus on a bit more. But it is actually a very intense few weeks at work – in addition to which I am also having to care for a very demanding toddler + working on several personal projects on weekends, so this meant I was very busy and only really able to eke out a little bit of time for studying.

Now, the title of this post is a little click-baity, but it is true. Recently it so happened that I re-installed Rescuetime, so I am able to definitively tell you exactly how long I spent preparing and “studying” for the exam from start to finish!! No more handwaving or vague estimations, I can actually tell you that in total, I spent exactly:

38.5 hours preparing for the Unity exam:

32 hrs (8 hrs x 4) : Attending a Unity Game Developer course
6.5 hrs : Self-studying

Breakdown of Course time

32 hrs: Attending a Game Developer course. I decided to sign up for and attend a course with fixed hours and a human instructor so it would formally “block” out time in my calendar to study Unity. I could have done it online on Udemy or Coursera or something like that, but attending it with real people also gave me the pressure that I had to finish the course, and I also could hear the sort of questions that new users ask (useful for someone who intends to teach it). Since it was formalised as a course I had to attend for 4 weekends, I asked my parents to help with childcare (thanks mom and dad!!!) during my course hours, so I could really dedicate the time to studying Unity and asking the instructor all the questions I ever had about Unity. I should add that at the point I took the course, I had several years of experience of casually using Unity already, so the material was generally very simple for me but I really appreciated having someone tell me what was the OFFICIAL way to do things. I’ve been anyhowly doing things for a long while (because I was self-taught but in a very disorganised way) and the instructor Siang Leng showed me many quick fixes for things I had been doing in very weird ways, so this was very enlightening to me.

For me, my intention when I take a course like this is to eventually reach the level that I could teach the subject, to be able to explain in detail the semantics of the user interface of the program, to understand everything about how the formats are encoded and used, and for me to I fully understand the processes from start to finish and do it in my own way, instead of just copying what the instructor is doing. I like to think that my capture rate (rate in which I absorb what instructor says) is very high, if not 100% at this point. Once I am shown how to do something, I will go and make sure I can do the task myself, and I will screenshot or even make a screen video of myself doing the task on my own after the instructor does a demo, and I immediately publish this to my own wiki (my ‘Second Brain’. In forcing myself to document everything this way (to be able to use my own demo to teach others), I am pretty sure that I… have more than accomplished the “lesson objectives”.

Breakdown of Self-Study time (6.5 hrs)

3.5 hr : Completing all the quizzes on the official Unity Courseware. When I did the course, I was given access to the official unity courseware on gmetrix. Now this courseware is the one for the “zombietoys” project that I vaguely remember trying out yeaaaaaaars ago when I first started using Unity. Not that I ever completed it. A lot of it seems very outdated, as it was done on Unity 5.something. But I decided to do the quizzes at the end of each section. If I got a section mostly wrong, then I went back to watch the video for it (at 2x speed, of course). I think I breezed through the first 10 chapters without getting quizzes wrong, then the second half was the stuff I clearly wasn’t so familiar with, things like Animation and Audio.

3 hrs :  Mock exams. I had access to a special 400+ mock exam question bank prepared by my course provider, like a kind of “ten year series”. To be honest, I didn’t have that much time, but at the barest minimum I decided that I would go through every single mock question once. I checked each question as I did it with the answer key. I did some of this whilst breastfeeding Beano with a split screen on my phone, however, I quickly realised that studying on my phone wasn’t the most ideal for certain sections because I really ought to have just done it with Unity open in front of me.

As I went along, I googled each section on the Unity Manual, googled any words I didn’t understand, opened up Unity and used the feature to build a test file. In Unity, I created every single possible asset once, created every 2d and 3d component once. I made handwritten notes as I went along, and later I also ‘revised’ from these notes by highlighting key words.

I asked my colleague (Unity guru!!!) for areas he thought I should revise and he mentioned a few areas that I realised I was less familiar with – Animation, Audio, etc. So I tried going through the motions of creating the animator, setting up some audio mixer groups, trying out every single type of light with all the different shadow settings, making different particles, etc.

I am glad to say that the outcome was, better than random! 644/700 means that I should have scored about 92/100, so yeah, I’m happy with that score. It was on the whole easier than I had expected, but I might have been lucky with the draw of the questions. I recognised several of the questions and topics from the official courseware / mock tests. The time (90min) was more than enough, I sped through it once and finished it within 40 minutes, marking all the questions I was not sure about for review and then I used the remainder of the time to check the ‘mark for review’ question set twice through, unflagging them as I made up my mind about the answers. Then after having checked it as best I could, I decided I would submit it (20 min early). (I was very glad to have done it on computer instead of at a test centre which would probably have given me a lot of nerves).

So what does this mean? It means that it is true that the exam is more about your experience and familiarity with the software and scripting. If you are a casual Unity user of several years, it is possible to pass the Associate exam (not professional exam) with basically what is just around 2-3 evenings worth of extra studying (6.5hrs) on top of completing a basic game dev refresher course (32 hrs).

I hope this helps someone else out there trying to decide if they should take the Unity exam and how to study for the Unity exam!

Many thanks to the Dingparents whose help made it possible for me to study for and ace the exam!!

Rochor Dream: HSL/HSV colour values and making an iridescent/rainbow shader in Blender

Recently I’ve enjoyed just playing around in Blender with colour. There are three ways of declaring colors in blender – hex, rgb and hsv – very similar to CSS/HTML where you declare colour in hex, rgb and hsl. In a way its easier to use HSV or HSL because the model is based on the colours themselves but from each colour you can also change saturation and lightness, so it is a lot easier to pick and compare based on how close a colour is to another.

You can’t possibly do that from just eyeballing the RGB values or worse still the hex code for a colour (hex being the more compact form and thus less human readable way of declaring RGB values). So in a way HSL/HSV is a bit more designer friendly. Most young designers don’t really delve that far into digital colour or colour spaces, and it seems more to be a thing that would concern programmers and developers more, but I wanted to get an iridescent colour-shifting hue, so the only way to get it is to look a bit closer at the way in which colour is picked.

Iridescence is where the surface changes colour as the angle of view or angle of illumination changes.
HSL stands for hue, saturation, lightness, while HSV stands for hue, saturation, value. (Personally speaking, the HSV and HSL colour spaces look pretty much the same to me…)

There’s some image compression on this image, so the colour wheel is a bit wack, but you can look at where the selector dot moves as I tweak the H, S, and V values….

In Blender there’s the handy color ramp which is meant to map the values of your colour into a gradient. You just define the colours at the ends and then get Blender to calculate the gradient between the two (or more) colours. Now what I found was that you can ask it to map the colours around the wheel either clockwise, counter-clockwise, and also either via the nearest route (when you want complementary colours) or the furthest route around the entire wheel, thus achieving that distinctive “iridescent” look which is very similar to what humans are able to perceive.

When you change the H(ue) value, your selector goes around in a circle. When you change the S(aturation) value, the selector goes from the centre outwards or inwards. As for V(alue), it goes from light to black. Compare this with the rather confusing mixture of red green and blue to that goes into any colour under the rgb color space.

To be honest, I’m not 100% sure this is the final colour I am going for, it still feels like an experiment. Anyway, I’m going to try to make a couple more things like this in the coming month; hopefully I can make a few interesting looking prints on the metallic pearl paper…

Excerpt from Rochor Dream:
Coming soon on Plural Magazine’s 100 Artists!

Standards for N95 Respirators and Surgical Masks

I’m not a medical professional, but as a mother of a young baby and daughter of parents who are over 60 years old, I ended up doing so much reading up on masks/respirators that I thought I may as well collate my thoughts together in a post like this which might be useful for others to understand the standards for respirators and masks, and the difference between disposable dust masks, surgical masks, and N95 respirators. [Note: this post was many days in the making because I’ve been caring for a small and very wriggly baby, so do note that I started writing this post before PM Lee announced the ‘circuit-breaker’ in Singapore. I expect that guidances may change regarding masks over time…]

It is rather long, so here is a summary so you can skip to the specific sections quickly…

Pitta Masks and PM2.5 pollution masks do not filter for virus particles
The difference between Masks and Respirators
N95 Respirators Standards – US Standards (NIOSH) & EU Standards (CE)
Surgical Mask Standards (EN 14683+AC Medical face masks) vs Non-medical Filtering half masks Standards (EN149:2001+A1:2009)


Pitta Masks and PM2.5 pollution masks do not filter for virus particles

Recently I made the decision to withdraw baby from infantcare (having foreseen that there would be a long period where I would be asked to work from home – that prediction has now been confirmed as reality) and as a result my parents have been coming to my house to care for baby whilst I work from home. Because this meant that my parents were exposed more than me because of their transit from their house to ours, my mother expressed worry about taking Grab. So I decided to buy some masks first and foremost for my 60+ year old parents who are in the most vulnerable category.

Two months ago, my very crafty and industrious mother tried to sew some reusable masks out of cotton – but I just was not convinced that this was safe. Even from my layman perspective, how could a cloth filter the microscopic particles of a virus? So I went online and randomly bought a packet of the first aesthetically pleasing mask I saw online – the Japanese Pitta mask. But since then, I have read the fine print: Pitta Masks cannot filter tiny virus particles. Online you can find people who have done tests on the Pitta masks and found that they “captured an astounding 0% of 0.3-micron particles”.

To be fair, the Pitta mask manufacturer does not advertise it for virus protection. It is simply that online sellers are putting it up unscrupulously without mentioning the fact of the matter that PM2.5 is not enough.

Image source: https://smartairfilters.com/en/blog/coronavirus-pollution-masks-n95-surgical-mask/
Read more: https://smartairfilters.com/en/blog/pitta-masks-protect-capture-coronavirus-virus/

The difference between Masks and Respirators

Having ruled out Pitta masks, I started trying to understand if I should look for Surgical Masks and Respirators.

In a 3M document I found online by their “3M Subject Matter Expert – Asia Pacific Region”, they state the different purposes of the masks vs respirators. It also says that “for any airborne particulate contamination such as an outbreak of PM2.5 / PM 10/ Severe Acute Respiratory Syndrome (SARS), Avian Flu, Ebola Virus etc. only respirators and not Masks, should be used to safeguard oneself from getting any kind of respiratory diseases.”

Respirators = designed to protect you from the environment
Masks = designed to protect the environment from you

N95 Respirators Standards – US Standards (NIOSH) & EU Standards (CE)

WHAT DOES A LESS THAN 0.1 MICRON PARTICLE LOOK LIKE? Does a mask really filter a less than 0.1 micron particle? Sadly, it seems that figuring out which mask can really filter such a tiny particle is impossible to us alone to judge; it is entirely down to a lab test – so you could say then that it is down to the various ‘standards’ that the batch of masks have to meet when they are tested in a lab. So this it led me to find out – who tests the masks to make sure they are up to the standard they say they are?

US Standard:
N95 Respirator [Filters at least 95% of airborne particles]
N99 Respirator [Filters at least 99% of airborne particles]
N100 Respirator [Filters at least 99.7% of airborne particles]
IS IT A REAL NIOSH TC-APPROVED CERT NUMBER? You can check here: https://wwwn.cdc.gov/niosh-cel/.

European Standard:
FFP1 Respirator [Filters at least 80% of airborne particle]
FFP2 Respirator [Filters at least 94% of airborne particles]
FFP3 Respirator Filters at least 99% of airborne particles]
Check for CE cert by looking at the cert’s issuing body. Unfortunately, there isn’t a centralised data base you can dial it into. For more, read here at CE-Check Support. But, I have found that some of the certifying bodies have got sites where you can enter the cert number to verify.

Besides those standards, there is the Chinese KN95 and Korean KF94 which are supposed to be equivalent in standard to N95. How do we verify them? Is there any way to verify them? I don’t really know. ¯_(ツ)_/¯

This is where it got murky… So I wanted to buy some working N95 Respirators. I dialed in “N95” on Qoo10, Lazada, Shopee and ezbuy. Here’s an example of the first respirator with dodgy papers which I found on Qoo10 from the seller “Collectible Haven”:


I took it one step further. I took the number they posted and checked it with the Standards body for NIOSH. THE CERT NUMBER THEY PROVIDED WAS NOT FOR THEIR COMPANY OR THE PRODUCT! It did have the same product number 1200F though, but I do feel deceived.

There were several other similar examples online but I won’t go through them. You can do the sleuthing yourself if you are concerned. But here is an example where I did buy the mask, and it checked out correctly.

Here’s an original box of 3M 8210 masks which on the list of N95 masks from the company, along with a diagram of how to tell if the mask is an actual N95 mask.

Source: How to check the NIOSH marking on the mask (ie: the N95 standard)

After discovering that several masks online that provided “documentation” of the masks which was fake, I decided to see what really constituted a surgical mask. They’ve been saying that surgical masks are what you need to wear, but that there were many cases reported in the media where people bought expensive ‘surgical masks’ which were very thin or suspicious. The Health Sciences Authority regulates the importation of surgical masks, and their website (currenly down) had stated that there was a difference between standard face masks (paper or cloth) and surgical masks (medical product, Bacterial filtration efficiency above 95%*).


Surgical Mask Standards (EN 14683+AC Medical face masks) vs Non-medical Filtering half masks (EN149:2001+A1:2009)

Some days back, I preemptively placed an order for what I thought were surgical masks in case we needed some.

These were the masks I ordered on Shopee from miluvs.sg

miluvs.sg posted a screenshot of the cert

These masks said they had a CE mark which I also went back to the original agency to cross-verify. Really strange to go to the effort to see if it was true, but I did and on the http://entecerma.it/ website (a weird marketing-oriented platform which helps foreign/chinese companies bring products to European markets through CE and other certifications) if you dial in the code from the cert – truly the certification comes up as authentic.

But at the time I didn’t check what device they were certifying for. What is “EN149:2001+A1:2009”? If you search for the original definition of the standard, this is for Respiratory protective devices: Filtering half masks to protect against particles. Which translated means it is a dust mask not a surgical mask. For a surgical mask, the European standard is “EN 14683+AC” – Medical face masks.

Source: miluvs.sg on Shopee

Again, this wasn’t false advertising on this seller’s part on Shopee. They did not say it was a surgical mask / medical product. I saw the picture of the mask and I personally assumed it was a surgical mask but in fact it is only a dust mask. A high quality, authentically tested and CE marked dust mask. Fair enough to them.

What is more unclear is that there are actually many sellers who DO sell their product as a SURGICAL MASK with CE mark but then the certs they posted show it is not a normal disposable face mask or some just posted nonsense. Here are 3 different examples (but there are countless more examples of this online)

Eg: Weilan777 on qoo10 – “surgical mask” with disposable face mask cert

Eg: OurFirstStore on lazada – “surgical mask” with cert for their machinery not the mask itself

Eg: Boslun on lazada – “surgical mask” with cert for different product

Did the sellers just assume that people would just glaze over looking at the certs and assume it was all good? You could say, “who cares about standards? just get the masks to the people quickly!” but then if you are buying this to protect a loved one, you don’t want to feel like you’ve been deceived into buying it, especially when the masks are being sold at increasingly cut-throat prices.

(There is also the question in my mind: is it ethical for me to be buying masks when there is a shortage in other countries? I acknowledge the privilege that I have to be in a comfortable financial position to purchase masks/respirators in Singapore where it is very readily sold on many consumer platforms – and also to be in a position to help others. What about people who can’t afford masks, or who don’t have a good home environment to spend the lockdown in? Since I am not in a position to volunteer, I looked into the organisations who are helping those who would be in need during covid-19. If you can, do consider giving to these groups:

AWARE – Vulnerable Women’s Fund: The COVID-19 pandemic underscores the already stark inequalities experienced by women in areas such as unemployment, housing, caregiving and domestic violence. This March, AWARE received 619 calls – our highest-ever number of monthly calls – with many callers dealing with emotional and psychological distress, violence and abuse. We need your help to ensure that we can continue to provide our services during this period, to aid these women in crisis.

Migrant Workers’ Assistance Fund: The assistance fund aims to provide emergency humanitarian assistance to distressed migrant workers. The assistance offered ranges from emergency shelter, daily essentials and basic sustenance needs to employment-related issues such as salary arrears. In the event where the migrant workers tragically lose their lives, the MWAF may also provide their next-of-kin with monetary assistance or in kind. The funds collected from our previous fund-raising activities have benefitted many distressed workers and helped them return to their home country. To continue to provide emergency humanitarian assistance and reach out to more migrant workers, who contribute to our economy.

The Library of Pulau Saigon in “2219: Futures Imagined”: Animated GIF Workflow

The Library of Pulau Saigon, Now at 2219: Futures Imagined (ArtScience Museum)

Over the years I’ve often told a story about an apocryphal encounter I had with a certain glass case full of items from Pulau Saigon at the ArtScience Museum, back in 2011…

Back then as a designer, I had been working on some interactive educational games for the education team at ArtScience Museum, and I had an opportunity to also show my own interactive artwork about the Singapore River – in a large cavernous space at the end of the huge Titanic show – a section about Singapore during the time of the Titanic. I was very much delighted to be able to show a work about the Singapore River next to some actual artefacts dug up from the Singapore River (loaned by Prof John Miksic). At the time I knew very little of the history of the islet – except the fact that, well.. not very much was known about it, and that it was plainly visible in some portions of my interactive (which had been based on old maps of the Singapore River).

I don’t really know what I should have expected, but the items were much tinier than I had imagined them when Angeline first told me about them. I recall feeling somewhat underwhelmed by its scale; they were entirely dwarfed by the space. I remember being somewhat confused by the label; and even though they were not my things, I began to feel worried that people would not understand them, or want to understand them. Audiences today have so much media fighting for their attention – they want to be entertained by easily consumable chunks of entertainment; right before this there was the spectacle of the TITANIC! TITANIC! READ ALL ABOUT IT! Could we really get audience to spend time and energy contemplating and thinking about this poky little vitrine full of tiny, rough, broken, complex things which might take more time to understand?

Anyway, I thought about how I used to obsessively photograph everything even back then. So why had I never searched in my own archives for photos of this purported vitrine that I saw in 2011? So I went back into my photo archives and… successfully dug up these photos!



BACK IN 2011: Pulau Saigon Artefacts at the ArtScience Museum
Part of my desire to make “The Library of Pulau Saigon” stemmed from that encounter with that problematic vitrine. So it feels quite fitting that a copy of this work is finally making an appearance at ArtScience Museum – in the new “2219: Futures Imagined” exhibition.

In terms of how the work is made, I’ve always been surprised how far hand waving gets you. The truth of the matter is that models are made from sampling Google Images and me finding individual (and sometimes different) methods to reproduce those objects in 3d by writing Openscad scripts to generate models. Some were straightforward like just producing svg outlines of objects and transforming them into 3D but others involved more… er…. creative coding. As an artist I might like to say that its the machine helping me along in the creative craftsmanship of the object, but actually I’m in the back hitting the computer with a big stick shouting “COMPILE, DAMMIT, JUST COMPILE MY CRAPPY CODE!”

This time around I decided I also wanted to generate lots of gifs showing the process in order to supplement the existing physical work which I got onemakergroup to help me reprint. Why didn’t I do this earlier? It seems people are always drawn to the screenshots of my openscad files for this, although frankly speaking if you are a techie person then you will quickly see that a LOT of intervention has gone into the making of the objects (whilst I’m cheeky enough to say that its an unforgetting machine that is making it, to a great extent the hand and the subjectivity of Debbie the artist is obviously written over all the objects)…


Since I did my project in 2015, Openscad has since gotten many more features including an “animate” feature – except that what it does is to render out frame by frame and you still have to compile everything together by yourself, so in the interests of time this wasn’t the method I wanted to use. (But if you did want to use Openscad to generate frames that you could compile into an animation, you can look at the default example within Openscad. You just have to create a value $t and then to start the animation, select View > Animate and enter some values into “FPS” and “Steps”, like this below)

Step 1: Automatically open and resize application window to specific size and position

First I figured out how to write an Applescript to resize windows so I can screen-capture them quickly. The following Applescript uses assistive access to resize and reposition the window of any app – including ‘unscriptable’ apps – but you’ll need to allow Script Editor to control your computer in System Preferences. You can change the numbers to fit the size you require. In my case I wanted to screencap it at 1024 x 768 but for some reason my screenshot app Monosnap does not start the capture at 0,0 so I adjusted it to fit (pixel by pixel). I also only wanted the app’s content so I added 2px to height and width.

Applescript to resize app window and set position:

set resizeApp to "OpenSCAD"
set appHeight to 770
set appWidth to 1026

tell application “Finder”
set screenResolution to bounds of window of desktop
end tell

tell application resizeApp
end tell

tell application “System Events”
tell process resizeApp
set the size of front window to {appWidth, appHeight}
set the position of front window to {5, 0}
end tell
end tell

Step 2: Screen video

I just used Monosnap (Free, Mac/Win) for this.

Step 3: Convert mp4 to animated gif

To convert the mp4 files into animated gifs, I used Gif Brewery 3 (Free, Mac). What is it about the palindrome loop (boomerang) that works so well?

Anyway I’m glad to have worked out a faster workflow for creating gifs quickly and maybe next time every other image I upload to my blog or website ought to be an animated gif!!!

Laser Cutting at NYP’s Makerspace



The laser cutter at school’s Makerspace has been a godsend since I discovered how easy it was to drop by and cut my materials. Perhaps because I wanted to compensate for previous times where I’ve gotten others to fabricate work for me – whenever I asked someone else to fabricate things for me I often felt I had lost the chance to handle the material directly as a result, to completely understand how to work with that material or how to make these things by hand. Although much of it could be ‘subbed’ out to other contractors, I feel there is value in understanding the process. So for this PYT project I decided I had to build all my acrylic things by myself this time around! And this meant many hours spent encamped in the Makerspace’s controlled access room…

Manual Focus for Laser Cutters

There’s this little tool for focusing the laser cutter properly.


You drop it into the head of the laser cutter like this.


And then adjust the level using the up and down buttons.


The world of laser cutting awaits! All you need to use is Adobe Illustrator to make your cut/etching file.

Where to find Materials for Laser Cutting in Singapore

The most cost efficient place to buy acrylic is probably Dama, with their FREE GIFT and SNACKS WHILST YOU WAIT COUNTER. Dama covers all the bases, from Acrylic to Polycarbonate and other interesting sheet materials. The default size of most of the 3mm cast acrylic sheet is 1220mm x 1830mm (about $48 + $1 cutting fee) which you can ask to have cut down into 4 sheets of 610mm x 915mm sheets which will perfectly fit larger laser cutters such as the GLS Spirit at NYP’s Makerspace!

However, for everyday purposes, acrylic and MDF is also available at Artfriend at a premium. Out of all the available units, I found that 18x24in is a size that I can easily transport around when quickly buying sheet material. For random everyday projects I find this sheet material from Artfriend works well enough.



Don’t skimp when buying the acrylic glue. Buy the green bottle of liquid quartz for $5.35. The one with the red cap dries with clouding which you do not want. But the more expensive liquid quartz acrylic glue bonds crystal clear.

Easy Laser-cut Builds

Use Makercase to instantly generate simple boxes like these.




Lamp Nomenclature and How to Wire a T5 Light

I may as well rename this blog as the “DebbieUniversity” or “How Debbie Did Everything The Hard Way”. Well, this week I decided to teach myself about lamp nomenclature and how to wire a T5 lamp. I wanted to check the colour temperature so I had to wire it on my own to test it for the work I was building.

The term “T5” or “T8” lamp is commonly used to refer to a generic type of mass-produced lamp that always found in the same lamp format with regards to its overall shape, power requirements, and illuminating qualities.

T refers to the light’s tubular shape and the number refers to the Tube’s diameter.

T5 = 5/8 inch (15.9mm)
T8 = 8/8 inch = 1 inch (25.4mm)
T12 = 12/8 inch = 1.5 inch (38.1mm)

I read online that in some places people confuse the situation by calling the T5 a T16 because that’s what it is in mm, and correspondingly call a T8 a T26. But in Singapore although we use the metric system and not the imperial system, we use the imperial lamp names.

How to wire a generic T5 LED lamp (3 wire to 3 pin)

Many of the T5 generics are labeled with vocabulary such as EASY TO INSTALL! SIMPLE! So this sounds just like a task for a home DIYer… right?

Firstly, read the “Operation Instruction” sheet that came with the “luminaire” which is fancy for “electrical device that provides illumination“. For example, this is the sheet which came with a Philips T5-type luminaire ($14 for the light, $1.20 for the wire)

Read that the first line says it must be installed by a qualified electrician. Then throw “Operation Instruction” sheet out of window.

(Just kidding, don’t killer litter, neighbours. I’ve already got enough old tissue on my laundry pole, thanks)

WARNING: IF YOU ARE READING THIS BECAUSE YOU ARE WIRING YOUR OWN LIGHTS AND DON’T FEEL CONFIDENT DOING IT, THEN DON’T DO IT! If you connect the wrong wires to mains power you may blow your appliance or you may accidentally electrocute yourself or someone else.

With that disclaimer out of the way…. on with the DIY!

Look at the wire that came with lamp. This is the wire for the generic T5 which came from Dama Acrylic ($12 including a free wire). 3-pin SG/UK plug head not included. You can get the 3-pin plug head separately elsewhere for between $1.00-2.50 depending on what extra features you like, such as THE PINS NOT TOTALLY FALLING OUT WHEN YOU TURN IT UPSIDE DOWN, or an extra red light that stays on when the fuse has not broken. It seems pretty standard that plugs are supplied with a 13A fuse which is there to protect the power cord and appliance should there be an power overload. (George pointed out that if I wanted to be a stickler about this then I should probably switch the fuse to a lower rated fuse such as a 3A because I’m using a much lower powered light here. But this is just a light test so…)

The stranded wire needs to be twisted together to give it some bulk that we can clamp onto later.

Next fold it on itself to give it even more heft. If its just left as strands of wire then the wires may spread out too much. If you double the twisted stranded wires on themselves it will ensure there is more wire for the screw to clamp on when it is tightened later.

Now you’ll want to open up the plug head and look inside to where you’ll be putting in the wires.

I try to form it into the vague shape that I need it to go into before I insert the wires and screw them in.

And then I feed the wires into the screw terminals and make sure they are fastened securely in the terminals.


Don’t forget to tighten the cord grip that will help prevent the wire from slipping out and ACCIDENTALLY CAUSING A DISASTRIOUS ELECTRICAL FIRE.

Now with the wiring SAFELY done, you too can enjoy or test out your T5 luminaire!

How to wire a generic T5 LED lamp (2 wire to 3 pin)

If you have a 2 wire situation going on and one is blue and the other is brown, then this is pretty straightforward. There is no Earth and you wire the brown to L and blue to N.

Here are some other burning questions that I initially had – and the answers to them, according to the collective wisdom of the INTERNETS:


There is no ground / earth in this light because this lamp is all plastic, has no metal fittings or switches, and isn’t likely to be touched by humans because it is going to be ceiling mounted for most users. The Earth wire is required when its something that has metal or electrical conductors on the outside and there may be a chance of humans touching it during an unexpected current leakage. So that is why in some simple T5 lights may not have an Earth Wire…


The ballast is an electronic component which regulates the electrical current in fluorescent tubes. T5 fluorescent tube lights require a ballast. T5 Integrated LED tube lights do not require a ballast.

Fancy Gems and Taoist Ancestor Worship

I don’t know anything about the ancestor worship practices in Taoism. So perhaps this is already all well-known to many, but just not to me. And searching on online for answers hasn’t exactly been very fruitful.

Recently it was the end of the 7th month, which was marked by rampant unattended fires on HDB grass lawns all over, red wax candles and joss sticks blazing, and a ton of food offerings left around. The most ubiquitous offering that I have seen around Ang Mo Kio have actually been these plates of gem biscuits.

The “fa gao” or steamed cupcakes with the four-way split on the top, the packet of food, the fruits… all those are familiar and recognisable enough to me but…. forgive me if this is stating something that should be plainly obvious, but since when did the Gem Biscuits become a widely accepted item of offering for the annual ghost festival ancestor worshipping??

When I started googling for Gem Biscuits I found out that they are in fact not the product of some nostalgic old local biscuit factory in Singapore or specific just to Singapore. According to NICECUPOFTEAANDSITDOWN, the gem biscuits originate from Reading from an biscuit technology accident at Huntley and Palmer, where the biscuit they were making shrunk by accident. They named them ‘gems’ and in 1910 went on to put hard icing on top of them. So it was a colonial import! (Along with bread and toast and kaya jams, which sound totally local but were a product of Hainanese deckhands bringing back and adapting their cooking skills from working on British ships to cooking ‘traditional breakfasts’ or your ‘chuan tong’ breakfast for the masses.

I observed in several cases that people had even scattered the fancy gems all over the ground in front of their offerings. Maybe that could be a clue…

According to NLB’s Infopedia (which cites a tv documentary as reference):

“For the Teochews, an additional step of eating cockles is performed. After the cockles are eaten, their shells are thrown around the grave. In the past, cockles were used as a form of money. Hence, the throwing of cockle shells indicates a prosperous family with gold scattered all over the ground (钱满地). The strewn cockle shells also indicate to those who pass by that the family has visited the grave.”

So I wonder… is this why people have taken to throwing gem biscuits all over the ground? Scattering the symbolic GEMS over the symbolic GRAVES? Or is the answer more quotidian, like, were the gem biscuits just conveniently being sold in the AMK bakery next to the AMK hell money shop?? Thus making them #1 offering of choice in AMK town? Or have wild birds taken to flinging the gem biscuits around? Cats? Someone in the block flamboyantly scattering the gems all Salt-bae-style?…

World, meet “Bizkit”





Bizkit is a javan mynah living in Ang Mo Kio who has been flying into our flat every other day to eat biscuit crumbs, noodles, and other scraps from our kitchen floor and kitchen sink. Although all the javan mynahs look exactly the same, we think that there is one unique Bizkit who is especially bold and unafraid of us. Some of the “Bizkits” come in pairs, but they also give us a very “guilty” look and scoot off the moment we walk into the kitchen. But there is one original “Bizkit” who does not seem afraid of humans at all and will even walk all the way to the threshold of our living room, even if we are in the kitchen itself. This post is about that Bizkit.

Bizkit likes biscuits, noodles, cooked human food scraps, and oil. The Bizkits also have an unhealthy interest in plastic bags, probably because they know that humans often put their food inside plastic bags. The food itself needs to be small enough for Bizkits to eat, and if its not small enough the Bizkit may pick up the food with its beak and then hit it onto the counter top or drop it onto the ktichen floor until it breaks into smaller components that it can swallow in one go. The Bizkits are surprisingly quite good at using tools which they pick up with their beaks. We noticed that Bizkit doesn’t seem to be interested in the healthy options we have offered in our household – chopped carrots or chopped fruits are only begrudgingly eaten and in fact most of the Bizkits will sit in our house and make loud, almost shouty sounds at us if there are no unhealthy oily food scraps left around. Its like they’re complaining at times.

After eating our crumbs, Bizkit will usually noisily wipe its beak on the window sill, fluff up into a ball, and chirrup a little. We’re not sure what the beak cleaning means, but some papers suggest that when a mynah bird is unable to complete the task it wanted to complete, it cleans its beak as a passive aggressive act. Or maybe a simpler answer is that the Bizkit’s beak is just dirty after it pokes around our kitchen to find bits and pieces.

Recently Bizkit developed a pink growth near its beak and I became worried it was the sign of an illness or tumour, but hopefully it is just a skin tag and something harmless that Bizkit will live through. These birds are wild, impulsive, and very bold, and it is apparently said their lifespan is about 4 years in the wild. They’re the kind of birds which are so curious that they will be the first to investigate roadkill, but in the process may become roadkill themselves. And if these javan mynah birds fight, its often a fight to the death! Apparently if they were kept away from the inherent dangers of urban life, their expected lifespan would be closer to the range of 12-15 years.

I don’t know how much longer we’ll be living in this flat, but for as long as we’re here, I hope to hear the familiar chirrup of Bizkits in our kitchen for many more moons!

Pictures of Bizkit are by George

Lessons in 3D Printing: Blobs, Warping, Gaps, Ugly Overhangs, and other disasters with gravity

What do you do after you’ve let the printer go on printing for several hours but all you have left to show for your efforts is a big fat deformed blob of PLA? Well, after incorporating a 3D printing component to the 3D module I was teaching, I found myself dealing with many different cases of 3D printing disasters which I’ll document here as a cautionary tale of the futility of logic and planning in the face of the freak accidents and an uncaring machine…

1. Blob around Extruder


What is it? Item comes off the print bed midway, sticks to the nozzle, and envelopes the entire extruder as a blob of goo which once hardens may make it impossible to remove from your printer.

How to fix? Watch your prints from start to finish (often this is impossible and impractical to do) or try to set up an IP webcam to catch instances where this is happening.

2. Warping



What is it? Warping is when you have a large part to print and the first layer which originally adhered so well begins to warp at one corner because of uneven cooling.

How to fix? The obvious fixes for this is to use a heated bed (check), use a heated enclosure (check) and print with a good brim or raft (check). Unfortunately even my rafts still continued to warp, so the main solution I used to fix this is to avoid the edges and to avoid overcrowding the print bed. I say solution but really it was just a temporary coping mechanism to try to get on with printing despite occasional warping.

3. Gap between parts


What is it? This is where someone has designed a part with an error and failed to check if the slicing is alright, resulting in this mess.

How to fix? Check and double check the design of all parts before printing! Look through every single layer if you have to to ensure that the thread continues and doesn’t just stop for a few layers.

4. Insufficient supports


What is it? Many a time I would see a file that did not seem to have sufficient support to keep the object from falling over. But since I wanted to make a teaching point of this, I let the item go to print so we could all experience the failure together. Now that I have observed several hundreds hours of prints, I find that I am pretty accurate at eyeballing a print and determining where a print lacks the supports for it to complete without falling over.

How to fix? ADD MAXIMUM SUPPORT. Don’t just do what you think is the minimum, because that is almost certain to end in tears. Add the maximum amount of support needed if possible and accept the fact that the only way to get some objects printed is to allow it to take the longest possible time to print (with all the additional support)

5. Ugly Overhang


What is it? This is where you knew the printer would make a squiggly mess of the overhang yet you let it go on printing.

How to fix? Like the previous support issue, you just have to add more supports than you think you need. Or slice the item into half and lay flat the two halves to print.

6. Flipped Normals


What is it? If your 3D model has errors or flipped normals in any portion of itself, it may be translated into a weird shell of itself if you forcibly slice it into gcode.