     
     func addEdgeConstraints() {
         let spacers = [
-            "leftSpacer": Spacer(),
-            "rightSpacer": Spacer(),
-            "topSpacer": Spacer(),
-            "bottomSpacer": Spacer()]
+            "leftSpacer": Spacer(color: UIColor.redColor()),
+            "rightSpacer": Spacer(color: UIColor.redColor()),
+            "topSpacer": Spacer(color: UIColor.redColor()),
+            "bottomSpacer": Spacer(color: UIColor.redColor())]
         
         // basic setup
         for (name, spacer) in spacers {
             spacer.setTranslatesAutoresizingMaskIntoConstraints(false)
-            spacer.layer.backgroundColor = UIColor.redColor().CGColor
             self.elements[name] = spacer
             self.view.addSubview(spacer)
         }

        
        for i in 0..keyboard.count {
            for j in 0..keyboard[i].count {
                let keyName = "key\(i)x\(j)"
                let key = self.elements[keyName]
                
                allConstraints += "[keyGap\(i)x\(j)][\(keyName)(keyWidth)]"
                allConstraints += "V:[rowGap\(i)][\(keyName)(keyHeight)]"
            }
        }

        }
    }
    
    /*
    Everything here relies on a simple naming convention.
    
    The rows of the keyboard have invisible spacer rows between them.
    There are also invisible spacer rows on the top and bottom of the keyboard.
    These are all labeled "rowGap<x>", where 0 <= x <= row count.
    
    Similarly, there are invisible spacer gaps between every key.
    There are also invisible gaps at the start and end of every row.
    These are labeled "keyGap<x>x<y>, where 0 <= x <= key count and y <= 0 < row count.
    
    The keys are labeled "key<x>x<y>".
    */
    
    func createViews(keyboard: Array<Array<String>>) {
        for i in 0...keyboard.count {
            var rowGap = Spacer(color: ((i == 0 || i == keyboard.count) ? UIColor.purpleColor() : UIColor.yellowColor()))
            let rowGapName = "rowGap\(i)"
            rowGap.setTranslatesAutoresizingMaskIntoConstraints(false)
            self.elements[rowGapName] = rowGap
            self.view.addSubview(rowGap)
            
            if (i < keyboard.count) {
                for j in 0...keyboard[i].count {
                    var keyGap = Spacer(color: UIColor.blueColor())
                    let keyGapName = "keyGap\(j)x\(i)"
                    keyGap.setTranslatesAutoresizingMaskIntoConstraints(false)
                    self.elements[keyGapName] = keyGap
                    self.view.addSubview(keyGap)
