Atypical: A Differently-Optimized Type System

November 25, 2017

What are programming languages for? This might be a silly question, but bear with me for a moment.

Most programming languages try to be at least partially general-purpose, but the languages that tend to grow popular are the ones that work well in an area where existing languages do not. C’s popularity persists because it’s still one of the few languages that lets you—forces you, in fact—to drop down to a low level and root around in the guts of the computer’s memory yourself. C++ carried that forward from C, but added more complexity, allowing people to create structure in larger software systems. Java took that object-oriented large-system-structure approach even further, but divorced it from the low-level programming of C and C++, running programs on a virtual machine that acts the same on a wide variety of hardware, at the expense of some performance. And then you even have environments like Node.JS, whose selling point was web development, where asynchronous programming is important and allowing people to use a single programming language in both the front end and the back end was desirable.

Many of these decisions stemmed from the kind of things each language was optimizing for: low-level programming, hardware agnosticism, easy transition by web developers, and so on.

A simple animation of a screen cycling through colors.

But if you go further, into the less-widely-used languages, you find some interesting cases where people are optimizing for other things. Rust optimizes for safety while trying to retain as much performance as possible. Haskell and its powerful type system tries to make sure your program does exactly what you want it to do and nothing else. Prolog is an attempt at making you tell the computer precisely what you want, and letting the computer go and figure out how to do it for you.

So here’s a question: how would you design a feature for a language meant for live presentations?

Read more…

Saying Goodbye to the Big Apple

July 4, 2017

When I talk to people about New York, I typically get one of two reactions. The first is a sort of reverent awe of the city, an admiration of its life and cultural richness, of its grand scale and its diversity of experience. The second is a sort of disdain, a general feeling that they would be overwhelmed or exhausted there, swallowed up by a city that doesn’t know their name and never will.

Neither of these viewpoints are wrong. They reflect different priorities in a person, a different understanding of what makes life worth living and what they’re okay with sacrificing.

Around a year ago, after doing a summer internship in the San Francisco Bay Area, I made the decision to accept a full-time job offer there after graduation, even though I had the option to take the same position, or a very similar one, in New York. I’ll be moving there in about two or three weeks.

I made this decision partly on a rational level: the Bay Area is the base of operations for my new job, meaning I get a lot more flexibility to do what I’d like within it. That’s not to mention the activity and opportunities in the area as a whole, since the Bay Area is the focal point of the world of technology. But a big part of the driving force behind that decision was emotional. New York, as much as I had enjoyed my time there, had tired me out.

Since then, I’ve had a lot of time to think about that decision, to explore why it is that I felt this way. And I’ve had a couple of insights that might help give people a better picture of my feelings towards the city, and to know what it’s like from the inside.

Read more…

Four Months of Alternative Controllers

March 5, 2017

How do you interact with a computer?

Chances are the first thing that comes to your mind is the keyboard and mouse, or a keyboard and laptop trackpad. Those more used to mobile devices might point out the touchscreen. Technically-savvy readers might point out the other sensors and systems that are typically included in today’s computers and mobile devices, like cameras, microphones, or motion detectors. Gamers might hold up the button-filled game gamepad as their interaction method of choice.

But are those the only ways? What other methods of interaction are there? Can we get creative with them?

Those are the kinds of questions I was asked during the Spring 2016 semester, when I signed up for NYU Tandon’s Beyond the Joystick course. Taught by Kaho Abe, it’s a course based around rapid prototyping of alternative computer interfaces, with a focus on interactive creative systems such as games and art exhibitions. It tasked us with creating a new controller, and associated game or application, nearly every single week over the course of the semester.

I’m going to take you on a quick whirlwind tour of a few of the projects I built, going a bit into the motivations behind each, talking a bit about the kind of sensors used, and relating some of the lessons I learned.

Read more…

Scenes from New York

June 14, 2016

It’s been about nine months since I first came to New York City. I’ve reached the end of my first academic year of my Master’s degree, and with that comes a bit of time for reflection. I’d like to take the time to share with you guys some of the little moments I’ve had around this city, and maybe give you a bit of a taste of what it’s been like.

Read more…