# Winter Break

My first semester at ITP is complete, and I enjoyed it very much. The workload was intense but that never bothered me. Every day I got out of bed excited for the things I would do that day.

Currently I am making improvements to this website. I made many enhancements to the style sheets and added a logo to the side menu. I also wrote extra documentation that I didn't have time for during the semester.

Before the next semester starts I hope to move the hosting from github to S3. If I have time, I'll add a P5 animation to the homepage.

# Complete custom keyboard (Part 5)

Behold! The completed custom keyboard:

I am very happy to have finished and delivered the completed keyboard. It took over a year.

# Nocturne #1

Here's a somewhat clumsy rendition of Erik Satie's Nocturne #1. I botched one measure towards the end but besides that I hit all the right notes.

I put together my own version of the sheet music in MuseScore because I couldn't find a version I liked without notation errors. Also, I wanted to learn MuseScore.

# First Jupyter Notebook Post

### This is a blog post created in Jupyter notebook.¶

The goal is to see how well this feature works. I'd like to be able to post Python code to my blog. Happily, Nikola supports that seamlessly.

Normally Nikola preserves the width of each notebook cell. It makes sense that it does this but that doesn't work so well with this template because of the navigation bar on the left side of the screen. That's OK, I can override it by changing the notebook styling with this if I need to:

#notebook-container {
width: 800px;
}



And here is some Python code:

In [1]:
def square(x):
return x**2

for i in range(10):
print(square(i))

0
1
4
9
16
25
36
49
64
81


And a plot:

In [2]:
%matplotlib inline
import matplotlib

import pandas as pd
import pandas.util.testing as pd_testing

In [3]:
df = pd_testing.makeTimeDataFrame(20)
df.index = pd.date_range(start=pd.Timestamp.now().floor('D'), periods=df.shape[0])

df.plot(figsize=(10, 5))

Out[3]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f57609a2fd0>

Magnificent!

# Camera3D and 360 Video

A new version of Camera3D has been released!

Version 1.2 supports 360 videos. Here is an example:

In addition, I made some performance improvements using new tools found in Java 1.8. Processing 2.x is no longer supported.

# Lux Aeterna

I've spent the past few months learning Clint Mansell's Lux Aeterna, otherwise known as Requiem for a Dream. It's a piece I enjoy very much and have wanted to play since I found some videos of other people playing it on youtube.

I made a few small mistakes but they are hardly noticeable. It wasn't my best day for recording myself playing.

# Mostly complete keyboard (Part 4)

Now the keyboard is pretty much done. For real this time.

Refer to (part 1), (part 2), and (part 3) for the back-story.

I previously wrote that I was "almost done" but in reality I wasn't anywhere near complete. There were many bad solder joints, resulting in shorts and disconnections for many buttons and several shift registers. It was frustrating because I had no idea how to debug it.

Eventually I wrote some Arduino diagnostic code to help me identify the problems. I also read several books on Multimeters. And lots of time studying my soldering joints with a magnifying glass. It was tedious, but now the keyboard works pretty flawlessly. Although it is possible another problem will creep up later, I am confident I will be able to deal with it.

The circuitry is complete. A few minor tweaks to go: some buttons needed to be filed down to fit properly, and perhaps a few more need some work. The keyboard also doesn't have question mark or comma keys. I plan on using a laser cutter to make replacement buttons for the duplicate times and caret characters since they aren't as important. I will take care of it at ITP Camp this summer.

And this is me typing with it! It really works!!

Some photos:

I wrote my own Arduino code to run the Arduino board. My code properly handles multiple key presses and lets the operating system handle key repeats. There is also diagnostic code to blink the Arduino's built-in LED if there is a hardware problem with the shift registers.

I am very happy to have finished the circuitry for this custom keyboard. For a long time this project seemed hopeless. Nevertheless, I stuck with it and now it is clear I will actually finish it properly. The soldering iron that was setup on my kitchen table since August has finally been put away. I'll take it out again later, of course, but for a different project!

Next up, Raspberry Pi experiments.

# In memory of my lamp

Tragically, the second lamp I made at ITP camp is gone.

I accidentally toppled it today. It fell, shattering into pieces.

I am not upset though. Most of the parts were salvageable and will be re-used in a future lamp. I have three wine bottles with holes already drilled in them, so I can make an identical lamp if I want to. I won't though. I realize now that filling the bottle to the top with gravel raised the center of gravity higher than where it should be. The next one will will be half filled with gravel. How about plastic or glass beads for the top half? I could make something that looks fishtank-like. I am sad that lamp is gone, but know that the next lamp will be better.

And now is a good time for a public service announcement on the proper way to clean up glass:

Very effective. I had bread-crumbs everywhere but that is much easier to deal with than the broken glass.

# Finishing a custom keyboard at home (Part 3)

Almost done with the custom keyboard!

Refer to (part 1) and (part 2) if you have not read them already.

I finally built up the courage to attempt the actual assembly. This part was very difficult and it took me a long time to figure out something that made sense and seemed achievable. There are so many buttons...how am I supposed to organize the buttons, the wires, the shift registers, and the resistors?

I started by soldering the buttons into place in their correct locations on each circuit-board along with resistors and wires for power and ground. Each circuit-board connected the power and ground wires to each other so I only had to add two wires from one board to the next to power the buttons.