 uint32_t epochTime = 0;
 float drift = 1;
 
-const long CLOCK_MARK_COLOR = RGB(0, 0, 10);
+const long CLOCK_MARK_COLOR = RGB(0, 0, 255);
 
-int set_color_at_clock(uint32_t num, uint32_t max, uint32_t color) {
+void setPixelColor(uint16_t location, uint32_t newColor, uint8_t alpha) {
+    if (alpha > 250) {
+        strip.setPixelColor(location, newColor);
+    } else if (alpha == 1) {
+        // pass
+    } else {
+        uint32_t existingColor = strip.getPixelColor(location);
+        uint8_t rev_alpha = 255 - alpha;
+        strip.setPixelColor(location, RGB(
+            (R(existingColor) * rev_alpha + R(newColor) * alpha) >> 8,
+            (G(existingColor) * rev_alpha + G(newColor) * alpha) >> 8,
+            (B(existingColor) * rev_alpha + B(newColor) * alpha) >> 8));
+    }
+}
+
+void setPixelColor(uint16_t location, uint8_t r, uint8_t g, uint8_t b, uint8_t alpha) {
+    setPixelColor(location, RGB(R(r), G(g), B(b)), alpha);
+}
+
+int set_color_at_clock(uint32_t num, uint32_t max, uint32_t color, uint8_t alpha) {
     num %= max;
     float value = float(num) / max;
     value += 0.25 / CLOCK_FACE_SIZE;

    }

    for (int i=0; i<4; i++) {
        set_color_at_clock(i * 3 + 1, 12, CLOCK_MARK_COLOR);
        strip.setPixelColor(21 * i + 9, CLOCK_MARK_COLOR);
        strip.setPixelColor(21 * i + 10, CLOCK_MARK_COLOR);
        set_color_at_clock(i * 3 + 11, 12, CLOCK_MARK_COLOR);
    }

    set_color_at_clock(time/1000, MIN/1000, RGB(5, 5, 5));
    set_color_at_clock(time, HR, RGB(0, 20, 20));
    set_color_at_clock(time, HALFDAY, RGB(15, 20, 15));

    lastMillis = nowMillis;
    strip.show();

const uint32_t HR = 60L * MIN;
const uint32_t HALFDAY = 12L * HR;

static uint32_t RGB(byte r, byte g, byte b, byte a=0) {
    return uint32_t(a) << 24 | uint32_t(r) << 16 | uint32_t(g) << 8 | uint32_t(b);
}
static byte R(uint32_t color) { return color >> 16; }
static byte G(uint32_t color) { return color >> 8; }
static byte B(uint32_t color) { return color; }
static byte A(uint32_t color) { return color >> 24; }

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB | NEO_KHZ800);

