Blog

The Chasm of Culture

If you know a bit about me, you’ll know that I grew up between multiple cultures: my mom’s side of the family lives entirely in Brazil, my dad’s side almost entirely in Portugal, and I myself grew up in Canada. Those three cultures have some pretty profound differences, from Brazil’s laissez-faire looseness, to Portugal’s focus on social rituals, to Canada’s more British-style aloofness and distance when compared to the other two.

I was exposed to all those cultures young enough that I internalized the different aspects of them. I grew up knowing that these different sides of my family and social groups acted and expected to be treated in different ways, and managed to find a way to center myself in the common ground between them while adjusting myself to fit them wherever necessary.

It’s led to a lifetime of feeling a bit like a misfit no matter where I go, but it’s also helped me have a broad perspective on a wide variety of different issues. I consider that outlook and perspective to be a very fundamental part of who I am today.

But even that kind of upbringing didn’t prepare me for the culture shock I would be exposed to when, as a kid, I moved from downtown Toronto to a semi-suburban neighbourhood in Halifax, Nova Scotia.

Read more…

In Defense of Negativity

A pair of goats.

Let me tell you about my great-grandfather.

There’s actually a lot I could tell you about my great-grandfather. It’s one of the things that my dad’s side of the family did very well, helping maintain a sense of continuity throughout the generations. My great-grandfather made his home in a tiny village in the interior of Portugal, and I’ve visited that place many times in my life. We still have a great-aunt who lives there in the same house he used to live in, one of the dozen or so people that still call that village home.

Every time we visit there, my dad tells us stories. About how the land around the village, now overrun with pine trees and brush, used to be covered in well-tended fields. About how he used to play with the rabbits they raised, and then have them for dinner later that day. About the time the village finally got itself a phone. One phone, in the centre of the village, for everyone to use.

And he told us about my great-grandfather’s old nickname. “José Mau”. “Bad José”, to partially translate it.

Read more…

Atypical: A Differently-Optimized Type System

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

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

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…