Twitter-Enabled Graduation Cap

With graduation looming, I knew I wanted to do something creative with my graduation cap. And I knew I wanted to steer clear of something like this:

cc1b9407b4055a2d7ae3788fa176def2--graduation-sayings-graduation-cap-designs

Barf.

My first thought was to attach a robotic arm on the top that automatically grabs the tassel and moves it to the other side during the appropriate time during the ceremony, but was put off by the fact that it would only be active for a four second action. It would also have a relatively low chance of successfully working given the uncertainty of the precise location of the tassel.

My second idea was to incorporate a screen into the cap that displayed a live feed of tweets with a certain hashtag. This would allow people to live tweet to my head during graduation and display whatever they wanted to Gampel Pavilion. I liked the idea of allowing anyone to write anything (or post any picture) they wanted to, and it would be displayed at a UConn event through a medium that UConn had no moderation of.

I decided to go the Raspberry Pi route for implementation. I totally could have just put my spare Kindle Fire in the cap and it would have worked fine, but what fun is that? If I wanted to change what the cap did after I’ve built out the hardware, I’d have more freedom with Linux. I also wanted a Linux shell and git to work on projects and RPi Minecraft in case the ceremony got boring.

IMG_0122

I measured the dimensions of my cap, and made a model in Fusion 360 of the enclosure for the electronics. I used a 7″ Adafruit HDMI display for the screen, a Raspberry Pi Zero for the computer, a USB hub, WiFi dongle, 5v battery pack, and necessary cables.

Fifteen hours later (and three too few top layers), the massive, bed-encompassing print had finished. Thank god for the Taz 5’s build volume.

I plugged everything in, screwed in the screen, and booted up the Pi with vanilla Raspbian.

After a quick paint job to comply with UConn’s rules about being allowed to walk at Commencement, I was ready to look into getting tweets to display.

The first thing I had to figure out was HOW I wanted the tweets to display. The screen was pretty small for something attempting to broadcast to an entire stadium, so I wanted the tweets to be as big as possible. I started to look into websites that essentially pull tweets with a certain hashtag and display them in a cleaner and more streamlined format for TVs in lobbys and whatnot. I tried Tweetwally, which was totally free but didn’t do a fantastic job of displaying the tweets very large. They came in in a “waterfall” format, keeping multiple tweets on the screen at the same time, decreasing their size.

I tested a few other free or freemium services, and eventually settled on Walls.io. Walls.io gave the option of displaying in a “billboard” format, posting one tweet at a time in large text, then switching to the next tweet after a specified amount of time. After all the new tweets have been shown, Walls.io cycles through old tweets, so there’s always activity on the screen. It also made the background of the page the image attached to the tweet, if there was one. Clean and concise, but…

Screen Shot 2017-05-10 at 11.08.19 AM

That infuriating yellow bar at the top will only go away if you pay €175 a MONTH. It looked even worse on the Raspberry Pi, taking up almost one third of the screen. Luckily, there’s an option in Raspbian’s native web browser to create a custom CSS file that modifies pages as they load. Selecting this option opens “user-stylesheet.css” in a text editor. After using the “inspect” feature in Chrome on my Mac to identify some classes associated with that bar (and other notifications I wanted to eliminate), I wrote three simple lines that hid the horrendous thing for good:

.wall-notification-visible{
    opacity:0;
}

And that was it. Pure, unadulterated feed of thoughts from my fellow peers. I was a little nervous about what people would write, but mostly I was excited to stir up some controversy and get people talking about it.

workingAtGraduation

It ended up being 95% congratulatory statements, and 5% memes; so much for controversy. Regardless, it was a total blast to build and have people get stoked to see their tweet on my head during graduation! It even got picked up by the news the night before graduation:

The Absurdity of Memorization

“Never memorize something you can look up.” — Albert Einstein


My fourth grade math curriculum was comprised of mainly one thing: multiplication tables. Essentially all of the math-allocated portion of the day was dedicated to drilling a set of seemingly arbitrary sets of numbers into our skulls. After a couple months of training, one of my peers asked our teacher why it was necessary to memorize our multiplication tables. Our teacher responded with, “Well, it’s not like you’re going to keep a laminated reference sheet with you at all times!”

So that’s exactly what he did.

To my knowledge, twelve years later, he still has a laminated multiplication table reference sheet folded up in his wallet. This serves no practical utility (especially given the fact he was still required to memorize his multiplication tables), but he did it to make a point: you can always look it up.

My fellow fourth grader laminated in defiance around 2004, but his point stands even stronger today. We each carry with us a pseudo-infinitely large “multiplication table” in our pockets at all times, leaving the modern need for memorization the smallest it’s ever been. Phone numbers, directions, conversion units, the air-speed velocity of an African swallow, you name it. Anything we can Google, we also efficiently eliminate from our brains.

Of course, some things are still crucial to memorize, namely in the case of an emergency where an internet-connected device is unavailable. A few important phone numbers, your social, stuff along those lines. And sometimes it’s wildly efficient to memorize something you use on a daily basis. For example, it would be prudent for a scientist who works frequently with a certain chemical compound to memorize its molar mass, or other commonly needed characteristics. But 99.5% of information can be cleanly purged without ill-effects.

I think this is fantastic. Intelligence isn’t a measurement of how well you can regurgitate information. Intelligence is a measure of what you DO with that information, and your creative solutions from a unique outlook. If we’ve built machines that are wildly efficient at organizing and indexing data, why bother trying to do the same? We should reserve our brain capacity for something only we humans can do: think critically. The information age isn’t making us stupid, it’s making it easier to be smart.

The State of Prototyping — The Best Tools to Help You Build and Fail Fast

The surge in at-home manufacturing over the past five to ten years has been extreme, with everyone and their mother attempting to miniaturize and simplify industrial manufacturing machines for home use. MakerBot famously spurred on the wave of consumer-grade 3D printers, resulting in hundreds of Kickstarter projects populating the early-adopter market. Anyone that wants a 3D printer can purchase a solid, reliable machine for only a couple hundred bucks nowadays. Other companies such as Inventables, Glowforge, and Wazer are finding ways to produce CNCs, laser cutters, and water jets respectively at a more economical and accessible price.

A similar trend in accessibility is notable with hobbiest electronics as well. Companies such as Adafruit and Sparkfun are “modulizing” electronic functions. Instead of having to create an entire circuit from scratch to develop a proof of concept, $19.95 and next-day shipping will get you a module that takes care of the hard stuff. Just wire into your microcontroller with I2C, use the provided library, and you’re off to the races.

And that’s just the hardware side of things! The nigh unlimited number of open-source software projects saves prototypers years of software development. OpenCV is one of my favorite examples of this. There exists a fully-featured machine vision framework that anyone with a moderate understanding of programming can dive into and give their widget intelligent sight.

And this is something everyone is jumping in on. Google with the TensorFlow machine learning library, Facebook’s React Javascript library for developing web applications; the list goes on.

In some ways, I believe this is arguably a step in the wrong direction. It promotes a shallower understanding of the technology being used in pursuit of simplicity and ease of use. The more plug and play it is, the less you understand what’s going on under the hood. But if your job is to test quickly, identify what is feasible, and make it look and feel gorgeous, you don’t want to get into the nitty-gritty. You just want to make a proof of concept. A production level of specialized knowledge in every relevant engineering topic is not reasonable to expect from one single person.

Handling and understanding the nitty-gritty is the job of a developer that specializes in one engineering practice. A quick hack job of a minimum viable product is passable for testing, but for a production unit, true engineering practices must be implemented. Designing a custom PCB, creating parts designed for injection molding — these things all require specialized knowledge in each of their fields. This is not to say that prototyping techniques don’t help developers. Many products in production utilize open-source libraries, or borrow circuit design from an Adafruit module. But ultimately, it’s the developers that need to know what’s going on under the hood, not the prototypers.


Throughout my time building proof of concept units, a few prototyping tools have stood out to me as being critical to my success:

1. 3D Printing / Excellent CAD Software

This one’s a no-brainer. And the real hero of this pair is CAD. Having solid 3D design software that you’re comfortable using and won’t get in the way of your design process is crucial. When you’re trying to build quickly, the last thing you want is a lack of good software design being your bottleneck. The job of these tools is to hinder the creative process in as few ways as possible.

I recommend Autodesk Fusion 360, for a multitude of reasons. It runs on PC and Mac, and stores designs in the cloud so collaboration is all in real time and trivially easy across platforms. The user interface is clean and understandable, especially for beginners, but also has many complex features for advanced users. The built-in rendering isn’t the best, but really convenient for getting a quick, pretty image of a part. Fusion also has built-in toolpath generation, and temperature and stress simulations, which I haven’t personally used, but have heard are fantastic features. Updates are released regularly with many new features, almost always sourced from interactions with users in the Autodesk forums. It’s a quick moving, fully-functional CAD suite that’s free for students.

Of course the other half of this marriage is the printer itself. Most on the market today will give exceptional results if tuned properly, but printers from Lulzbot and Prusa Research are sure-fire wins. I’ve had a Lulzbot Taz 5for a year and a half now, and I have only good things to say about it.

2. Module-Based Electronics

The central nervous system of your widget, silicon is getting increasingly more accessible due to the aforementioned modulization movement. Standardized communication protocols such as I2C, SPI, USB, and Serial in conjunction with libraries provided by the manufacturer help make modules easier to interface with each other, especially with an Arduino-style microcontroller at the core.

These modules can do just about anything you could expect from your widget. They act as the interface to the outside world, gathering data or displaying it. They act as Human Machine Interfaces (HMIs) and allow different kinds of interaction with the user.

3. Python

This could arguably be another similar language, but I think Python really nails the essence of prototyping. The first argument for this is Python’s syntax. In many situations, Python can read very close to plain english. This lowers the bar for entry in terms of comprehension by a significant degree. When even a beginner can look at some code and immediately understand what it does, you’re removing barriers to creativity and getting out of the way of the prototyping process. Plus, being cross-platform doesn’t hurt.

The truly significant reason why I believe Python is critical to prototyping is the absurdly large number of libraries available to help you accomplish almost anything you could imagine with the language. The excellent documentation that goes along with most of these repositories makes them simple to implement, and keeps you moving. The vibrant community constantly developing tools for anyone to implement with Python make it an incredible tool for any prototyper to utilize.

4. Wait, why not ___?

CNCs? Laser cutters? Hell, sewing machines? The reason I picked what I picked is because all of those tools move an aspect of prototyping from “prohibitive” to “accessible.” I can still sew with a needle and thread. It might take me longer than it would with a sewing machine, but it’s still doable. Same goes for a CNC and laser cutter. They are tools that just make an already accessible task a bit easier. But if I didn’t have a 3D printer, the only way I could make the part I needed was to get it injection molded, or custom-machined, which is prohibitively expensive. Module-based electronics are similar, but with time as opposed to money. Understanding enough about electronics to design the functionality of all the required modules and combine them would take a prohibitively long amount of time, especially in a prototyping setting. Not the difference between 20 minutes of using a CNC versus an hour with a jigsaw, but the difference between an afternoon of connecting modules versus years and years of studying and learning about the fundamentals of electrical engineering. And in the same vein, python (and its all-encompassing array of libraries) reduces the development time of software from a prohibitive amount of time, to an accessible one. These three are game-changers, not time-savers.

Keeping a Skill Index

I was recently asked, “What was the first thing you built that you were truly proud of?” My answer was an RSS feed aggregator I build in high school to get my feet wet with php, database management, cookies, etc. But as I was explaining the technical details of the project, I was surprised recalling what skills I had used to complete it. Granted, it had been four or five years since I had worked on the site, but this was slightly jarring to me. How many times had I neglected to consider that I had the ability to develop in some way, and altered my development stack because of it? I felt like this was unlikely; who actually forgets they have a skill? But I had clearly done it to some degree.

This got me thinking about all the projects I had worked on. What went into them? What did I have to learn in order to complete each project? What are all the skills I’ve collected over the years? And most importantly, what are all the features I could incorporate into a hardware and/or software widget?

So I counted.

I opened a new note in Evernote and started listing. Software, hardware. App development, data storage and management, programming languages, libraries, APIs, methods of automation, bluetooth and wifi connectivity, development boards, all of it. After an hour or so, I felt like I had summarized my smattering of technical capabilities into a neat, hierarchal format.

My first reaction was satisfaction. This document had become my “maker resumé.” All of my “just-for-fun” projects suddenly had a very practical result by adding a skill-set to my development toolbox.

The second was potential. Patterns emerged while scanning this collection of seemingly non-related capabilities. And they were definitely not USEFUL patterns, but it got the gears turning. I started picking three random topics and trying to see how I could combine them. A script that tweets the first hit on Google Images of the word you’ve said most that day. A heads-up display that constantly shows you how many steps away you are from Reno, Nevada. A thermostat system that changes the temperature in accordance with the NASDAQ. Again, not tremendously useful, but a fascinating exercise in creativity. Seeing the possibilities of what you can create is an empowering feeling of possibility.

If someone asks you if you’ve read Stranger in a Strange Land by Robert Heinlein, you know immediately if you have or haven’t. But if they ask you to tell them all the science fiction books you’ve ever read, that is a MUCH more difficult task. So, the point of this exercise wasn’t to help me remember what I’ve done. If someone asks me to build a web scraping app, I can tell them immediately if I can or can’t; my memory wasn’t the issue. The point of this exercise was instead to be able to see all the “science fiction books” I’ve ever read in one place for easy reference. To get the juices flowing. To see how any combination of these techniques could be used together. To keep possibility on the front of my mind.

This becomes the most useful when brainstorming solutions. If a solution is simple, it becomes a “Have I read this book?” scenario. But if you’re attempting to solve a complex problem, looking at everything on the table gives you more context and perspective on ways to build a solution.