Universal Design - Redesigning My School's Band Room

Universal design is the process of crafting objects and buildings to suit as many people as possible. Despite the Americans with Disabilities Act of 1990, many public spaces still do poor jobs of accomodating people with disabilities. This blog post examines one such space, my high school’s band room, and provides suggestions as to how it can be improved.

My Redesign

The demo below requires WebGL. If it doesn’t work, upgrade to a modern browser like Chrome. Use W, A, S, and D to move around. Use Space and Shift to fly up and down. Use the arrow keys to rotate. Click to focus and begin, and click outside to exit.


The Sink

The first thing people notice when they walk into the band room is the random sink to the right of the door. The first issue with the sink is its placement. It is impossible for wheelchair users to navigate around it in its current orientation. Also, its position in the middle of what should be an open clearing poses a hazard for people with impaired vision.

Image of the sink in the air filter corner.

Figure 1: Image of the sink in the air filter corner.

The easiest fix is to push the sink against the wall because doing so moves it out of the way and provides people with wheelchairs easier access. To accommodate this change, an automated faucet would need to be installed. For maximum comfort, the entire desk/sink should be closer to the ground, and there should be room beneath the sink to allow wheelchair users to slide in close. In my opinion, these changes make the sink a much more attractive fixture of the room, showing how adhering to the Social Minority Model (SMM) can inspire creative design solutions for everyone.

The Air Filter

The current band room’s layout is very confusing, with all of its twists, turns, and level changes, so I installed a purposely loud air filter as an audible landmark. I placed it at the beginning of the room so people would instantly be able to tell how far into the band room they are.

The air filter will also help people with allergies, like me, but everyone benefits from cleaner air. This demonstrates the fact that modifications that level the playing-field make everyone’s lives easier. If people don’t include others on their own, then learning about the Disability Rights Movement teaches them to do so for their own benefit.

The Ramps

Another unique characteristic of the band room is its multi-layered structure. There are three floors of desks, and no easy way for wheelchair users to navigate between them. Also, the steps could be quite jarring for blind people if their canes don’t make it immediately clear that there’s a drop.

Inside view from the back of the band room towards the chairs.

Figure 2: Inside view from the back of the band room towards the chairs.

To fix the first problem, I installed ramps on both sides of the room. This way, people entering can take the shortest route to their desired destination, and people can loop around the entire room if necessary.

The Borders

To prevent the problem of tripping and falling, I created a border material on the edges of the steps. This way, people will know when they’re getting close to an edge. I also specifically colored each level of ramp a darker pink than the level above it because people with depth perception issues might not realize there’s a downward slope. Darker colors are an intuitive representation of depth.

At first, it was only obvious that the room needed one ramp. But by reflecting on the decisions of the Ed Roberts campus, I realized two ramps were optimal because of the difficulty people in wheelchairs have turning around. Keeping disabled people in mind when designing buildings teaches people to be more empathetic.

The Piano and Desk

Inside view from above the ceiling. The projector screen is in view.

Figure 3: Inside view from above the ceiling. The projector screen is in view.

The piano and front desk were moved to reduce the clutter near the front of the classroom. This clears the way for wheelchair uses and makes the room look nicer overall. Likewise, the whiteboard was removed and a projection system was installed on the wall above the piano and desk. This makes it easier for everyone to read in-class presentations.

The Doors

Render of the band room from the ramp looking towards the door.

Figure 4: Render of the band room from the ramp looking towards the door.

Making the manual doors automatic is a trivial change but an important one. I made all of the doors in the band room larger and automatic to give people in wheelchairs plenty of clearance when entering and exiting the building.

The Glass

View from the outside, top down. Can see the brick and glass walls, the concrete upper area, and the ramp.

Figure 5: View from the outside, top down. Can see the brick and glass walls, the concrete upper area, and the ramp.

The band room currently looks pretty grim from the inside, so I replaced the back wall with glass. This will let in natural light during the day and allow people to see inside the newly designed building as they walk around the gym.

The Ceiling

One big problem with the band room is how reverberant it is. Whenever a few people sing and play instruments together, the loudest person’s echoes drown out everyone else. The echoes make it hard to stay focused on the music, which impedes practices. Even worse, it’s impossible for two groups of people to play different pieces at the same time because each group can hear the other.

To fix these issues, I installed a stretchy fabric material under the ceiling to absorb the noise (not shown in the images due to the impracticality of setting up ceiling-specific light sources and the fact that it would just be a flat plane). This feature wouldn’t interfere with nearby sounds, but it would prevent noises from echoing and traveling too far. Again, this benefits everybody, but people with difficulty hearing would benefit the most. This speaks to the fact that universal design isn’t specific to disability but rather to humans (and maybe animals too).


What are the ways in which the Social Minority Model, the Disability Rights Movement, and a study of Disability expand our understanding and enrich our world?

The Social Minority Model increases people’s understanding by opening their eyes to diversity. By making simple changes to the environment instead of to the people, the SMM shows everyone how easy it is to be inclusive. It consequently gives disabled people the option to preserve their identities, enabling them to actively participate in the rest of society. The SMM therefore makes it easier for Disability activists to fight for their rights.

The Disability Rights Movement is an excellent source of upstanders. It inspires repressed people everywhere not because it involves disabled people but because it saw great success despite ancient stigmas hindering its progress. Lastly, it’s important to study Disability because it challenges one’s prejudices. I didn’t have any ill feelings towards disabled people before this unit in Psychology class, but I never thought critically about Disability before either. Now that I’ve thought significantly more about it, I am more confident in my ability to be a tolerant human being.

Study with 2048

The game is hosted at http://2048.igliu.com/. Because it’s a webpage and not a native app, it runs pretty slowly on phones. I’ll see if I have time to make an Android/iOS app in the future. If you have any feature suggestions, feel free to leave me a comment on this post or raise an issue on the github repo.

Fork me on GitHub

Cellular Automata

Cellular automata (CA) are structures that change based on very simple rules. In this blog post, I’ve implemented a demo that sets the background to a one-dimensional CA.

One-dimensional CA were first popularized by Stephen Wolfram, who wrote a book about them called A New Kind of Science. It’s quite lengthy, but there are tons of cool pictures and lots of new ideas (I had never even heard of 1D CA before reading it). For example, the 1D CA with neighbor distance $1$ and rule $01101110_2=110_{10}$ (if you don’t know what these terms mean just hang tight) is capable of simulating all computable functions, meaning given enough resources, it’s basically a computer. I’ve yet to use rule $110_{10}$ for computation, but it certainly looks very cool (see for yourself below).


I recommend leaving all the boxes blank for your first run. Defaults will be inserted in blank boxes. Then you can play around with the values to see what each option does. Note: colors must be input in the following format, “#FE624A”. If you’re on a mobile device, I recommend clicking the image link for optimal viewing.

Image link: none

To save the background image, click on the link and type ctrl+s. If you want to generate another random rule, make sure to delete the current one.

How do One-dimensional Cellular Automata Work?

Start out with a row of zeroes and ones.
Add a row of blank spots beneath it to denote the next generation. We can make two-dimensional images by stacking subsequent generations on top of each other.
For each $0$ in our new row, we’re going to look at the previous row to decide whether or not it stays a $0$ or becomes a $1$. Here’s where the “Neighbor distance” part comes in: we’re only going to look at bits in the vicinity of the bit directly above the current $0$.
We look at the bit directly above no matter what. But see how our view extends one to the left and one to the right? That’s the neighbor distance. So now we need to decide whether or not the current $0$ should be a $1$ based on the pattern $010$. How do we do that? It’s super easy. Cellular automata are defined by their rules, and their rules tell us exactly which patterns get turned into $1$s. I won’t describe this in too much detail, but imagine listing out every possible pattern for a given neighbor distance:
And highlighting the patterns that you want to result in $1$s.
Now, write $0$s for all the unhighlighted patterns and $1$s for those that are.
$$\text{Rule: }00100010$$
All we have to do is apply this rule a million times and we’ll have a nice new background image to show off. Aren’t you glad you’re not a computer?

Fork me on GitHub

Monte Carlo Pi

Using random numbers, it’s possible to approximate $\pi$.

Here’s the strategy: Draw a unit circle (radius of $1$), and pay attention to the portion in the top right quadrant. The area of the square that surrounds this quarter-circle is $1$ because each of the sides is $1$ (see the image below). The area of the circle is $\pi r^2=\pi\times 1=\pi$. So, the area of the quarter-circle is $\frac{\pi}{4}$. The ratio of the area between the quarter-circle and the square is then $\frac{\pi}{4}:1=\frac{\pi}{4}$. This means if we were to hang these shapes on a wall and throw darts at them randomly, $\frac{\pi}{4}\approx75.5\%$ of them would be within the quarter-circle. So once we finish throwing a bunch of darts, all we need to do is multiply the quarter-circle:square ratio that we observe by $4$ to approximate $\pi$.


Points tested: 0
Pi is approximately equal to: 0

Techniques like this one that use random sampling to solve problems are called “Monte Carlo methods”. Why the randomness? Why not just throw darts procedurally down each row and column? That would work well for this problem because we wouldn’t have to test too many points. A $400\times 400$ image has $160,000$ pixels, which would be easy to run through on a modern computer. However, for some problems, running through every possibility would take far too much time. Monte Carlo methods are hugely beneficial in these cases because they allow you to get a good sense of what the sample-space looks like without actually sampling every single point.

Fork me on GitHub

Gridworld - Evolving Intelligent Critters

Recently I’ve been independent-studying for the AP Computer Science exam, and I made this to help me prepare.

This program is a Gridworld1 Critter (named FlowerHunter) that hunts Flowers by using an artificial neural network (ANN) to make decisions. A genetic algorithm is used to improve the ANNs.

The FlowerHunter Critter

FlowerHunters are able to sense the immediate 8 spaces around them. They use their brains (ANNs) to decide where to move (they can only move to blank spots or spots with Flowers). All decisions are made by their brains (they have no hardcoded motivation to move towards Flowers).

The Artificial Neural Network

The ANN consists of an input layer (inputs are Doubles), a configurable number of hidden layers (size of each layer is configurable as well), and an output layer. This is a boolean ANN, meaning each neuron outputs a 1 or a 0. Currently the neurons have no activation function; each neuron simply fires (outputs a 1) if the weighted sum of all its connected neurons is greater than its threshold. This means the output layer is a bunch of zeroes and ones, but it can easily be interpreted as a list of Integers or Strings.

FlowerHunter Brains

Each FlowerHunter has an ANN for a brain. There are 25 inputs in the current implementation: for each of the 8 possible neighboring locations, 1 x coord, 1 y coord, and a number signifying whether or not the Actor (or null) at this location is a Flower. This makes 8*3 = 24 inputs, and the 25th input is the output of Java’s Math.random() to vary the behavior each time. Each FlowerHunter begins with randomly assigned weights and thresholds, so initially, their brains aren’t very good at figuring out how to eat Flowers. There are 3 outputs because 3 outputs -> 3 bits -> 8 possibilities -> which of the 8 neighboring locations to choose (this explanation is incomplete so look at the implementation for specifics).

The Genetic Algorithm

This program is essentially a cartesian genetic programmer, except instead of many different function nodes, there’s just one (weighted sum function in the neurons of the ANN).

When the program starts (Generation #1), 5 random FlowerHunters (random brains) are created. Each FlowerHunter is placed on a grid randomly populated with Flowers and allowed to act a specific number of times. Once it’s finished, the number of Flowers consumed is computed and treated as that FlowerHunter’s score. This process is repeated dozens and dozens of times for each FlowerHunter in order to calculate an accurate average score. From these initial 5 FlowerHunters, the highest scoring one is chosen as the seed for the next generation. It is taken and mutated (the weights and thresholds of its brain are changed slightly) 4 times to produce the next generation of 5 FlowerHunters. This process is repeated every time the user clicks the “step” button.

The fact that only FlowerHunters that score well are chosen means there’s an environmental pressure to score well. Successive generations get better and better scores because only high scoring FlowerHunters surive to the next round. The important point to note here is that the motivation to consume Flowers comes from the outside. There’s no code within each FlowerHunter that tells it to eat Flowers.

Next Steps

Currently, there’s no way to see the FlowerHunters in action. The hundreds of trials necessary for each generation take milliseconds to run, so clicking the “step” button leaves the Grid in whatever state the last FlowerHunter left it in.

This means there’s no way to qualitatively describe the behavior of successful FlowerHunters. I’m really intersted in seeing what kinds of strategies the CGP develops. Do brains always favor Flowers over empty spots? Do the FlowerHunters move towards the center of the Grid when there’s nothing else they can do? The easiest way to answer these questions is to add a super slow-mo version of the program where each step of each trial of each FlowerHunter of each generation is rendered individually. Alternatively, the ability to export brains could be added, and then a separate program could be written that’s nothing more than a FlowerHunter with that brain.


1 Gridworld is a Java program used to teach AP Computer Science to highschool students. It gives students the chance to work with a relatively large codebase without having to write a whole bunch of code themselves.

Fork me on GitHub