Hello, friends! !!Con 2017 is scheduled for May 6-7, 2017! Check back soon for a full website with more details about our 2017 plans.

!!Con logo

!!CON 2016

The joy, excitement, and surprise of programming

May 7-8, 2016 in NYC

Keynote Speakers

Catt Small

Catt Small

The Creative Programmer

Catt Small is a product designer, game maker, and developer. She is currently making awesome things at SoundCloud. She started programming interactive games at the age of 10 and has been going ever since. In her spare time, Catt organizes events and teaches game development with The Code Liberation Foundation. You can follow her @cattsmall on Twitter and view her work at www.cattsmall.com.


Ramsey Nasser

Ramsey Nasser

The Unfortunate Value of Failure

Ramsey Nasser is a Lebanese computer scientist, game designer, and educator based in Brooklyn. He researches programming languages by building tools to make computation more expressive and implementing projects that question the basic assumptions we make about code itself. His games playfully push people out of their comfort zones, and are often built using experimental tools of his design. A former Eyebeam fellow and a member of Kitchen Table Coders, when he is not reasoning about abstract unintuitive machines, he builds and maintains vintage motorcycles.


Speakers

Mark Allen

Mark Allen

“values of β may give rise to dom!”

In what may be the strangest error message of all time, we are warned that values of beta may give rise to dom! This bizarre error message made it into early UNIX releases. Why? What caused it? What is β? How can we stop the insidious rise of dom?!

UNIX publicly debuted in 1974 in an article in the Communications of the ACM, and it has thrived and prospered ever since. In this talk, we will take a whirlwind tour through the error handling subsystems of an early UNIX kernel and its utilities, with an eye toward what those techniques tell us about system design.

Mark Allen enjoys singing, being a dad and smoking things…brisket, mostly.


Valerie Aurora

Valerie Aurora

How I fixed UNIX atime! With 10 lines of code and feminism!!!

File systems are way too hard for ordinary people to understand, right? No way!!! I’ll explain how I saved billions of unnecessary disk writes by fixing one of the oldest file system problems in existence — UNIX file access time updates! I’ll explain it in terms even a computer beginner can understand! And I’ll show how feminism helped me do it!!!

Valerie Aurora is a former Linux kernel file systems hacker turned diversity in tech consultant at Frame Shift Consulting. She co-founded the Ada Initiative and loves giant squid and ball lightning.


Samy Al Bahra

Samy Al Bahra

Debugging debuggers!!!

Debuggers are one of the most important tools in the programmer’s toolkit, but also one of the most overlooked pieces of technology. They have to work in some of the harshest conditions, supporting a huge set of programming languages and aggressive transformations by compilers. What makes them work? And when don’t they work?

In this talk, I will take you on a journey to some of the darkest and most confusing pits of systems programming involving debug formats, compilers and process control. I will describe situations where debuggers have failed you, and why. If you’re not hacking on debuggers and are not a masochist, you will walk away with an increased appreciation of life.

Samy is the co-founder of Backtrace, where he helps build an integrated debugging platform with debuggers that try to automatically debug. He lives in Brooklyn and his passions include software performance and multicore synchronization and run-on sentences.


Sina Bahram

Sina Bahram

How I Code and Use a Computer at 1,000 WPM!!

I use a computer very differently than most people, because I’m blind. When I’m surfing the web, tweeting, checking email, reading the news, and writing code, I’m doing so because a program called a screen reader is reading me what’s on the screen. I happen to listen to it read me this text at a thousand words per minute! Join me in listening to how I experience some common user interfaces. Yes, I’ll slow it down for you. I also have a challenge for everyone in the audience. Can you get through a day only using the keyboard? What about not looking at your screen?

Sina Bahram is an accessibility consultant, researcher, and entrepreneur. He is the founder of Prime Access Consulting (PAC), an accessibility firm whose clients include high-tech startups, fortune 1000 companies, and both private and nationally-funded museums.


Katie Bechtold

Katie Bechtold

Code in Spaaaaaace!!!

How do you write software that needs to perform perfectly a decade from now as it hurtles by an unexplored planet at thirty thousand miles per hour? Welcome to the world — er, universe :) — of interplanetary spacecraft flight software, where “launching” your software takes on a whole new meaning. Cosmic rays, constrained memory, execution time limits, and billions of miles between maintainer and program are a few of the challenges we’ll explore in this talk.

Before running the New Horizons spacecraft as a flight controller for the first-ever reconnaissance of Pluto and Charon, Katie wrote flight software for that spacecraft and one of the scientific instruments aboard a Mercury orbiter. She loves practicing the Way of Tea and mucking about in caves.


Kiran Bhattaram

Kiran Bhattaram

The tales of the cursed operating systems textbook!

I have a cursed operating systems textbook — each chapter I read unearths a new bug in the systems I work on. Come hear my tales of woe:

  • the chapter on kernel data structures that conjured up memory leaks INSIDE THE KERNEL!
  • the catastrophic slowdown caused by the syscalls chapter, narrowly averted by the magic of strace!
  • the networking chapter and the 200ms slowdown in EVERY network call we were making!
  • AND MORE!

Along our journey, we’ll acquire some fantastic operating systems tools and incantations you can use to vanquish even the scariest bugs!

Kiran Bhattaram loves making things, whether tinkering with circuits, writing software systems, or sewing dresses. She works on Stripe’s infrastructure team, and has previously built things for the New York Times, LinkedIn and MIT CSAIL.


Sher Minn Chong

Sher Minn Chong

Plants are Recursive!!: Using L-Systems to Generate Realistic Weeds

Plants and programming are more related than you might realize! Trees, shrubs and weeds may look complex, but with the magic of recursion, we can describe them with just a few simple rules.

We’ll explore how we can use the recursive nature of L-Systems to create complex and natural-looking plants. And why stop at plants? We’ll also see how L-Systems can be used to describe some of our favourite fractals such as Sierpinski’s triangle and the Dragon curve, and how they can be used to create art.

Sher Minn is a part programmer and part fractal enthusiast from Malaysia. She never-graduated from the Recurse Center in 2015 and is currently a front-end web engineer at Viki. She enjoys running, making art with code, and posing awkwardly for photos.


Brendan Cordy

Brendan Cordy

Making Money Disappear with Hash Functions!

What is a Bitcoin address? Where do all those weird letters and numbers come from!? Once we figure it out, we can dig deep between the cushions of the cryptocurrency couch and find lost coins claimed by bugs.

You might think this would dissuade me from trying to generate addresses and transactions from scratch, but it didn’t. Watch in horror as I put my own money at the mercy of my code.

Brendan teaches people math, bikes up hills, and creates beer. He will probably never realize that doing things from scratch is often a bad idea.


Brendan Curran-Johnson

Brendan Curran-Johnson

A Shot in the Dark!

Cameras can be intimidating to new photographers. They’re full of options and toggles that don’t always have obvious results. Preset modes make it easier to take great photos, but their underlying mechanics often remain a mystery. Learn how to reverse-engineer a preset camera mode and uncover the secrets contained in these (often literal) black boxes.

Brendan writes code for a living and takes photos for fun. He still has a lot to learn about both.


Anne DeCusatis

Anne DeCusatis

My favorite Unicode character: the zero-width joiner!

Some people have favorite numbers, and since character encodings are basically mappings from binary numbers to characters, I think it’s pretty much equivalent to say I have a favorite character! U+200D ZERO WIDTH JOINER (ZWJ) is used to combine separate characters, usually in Indic and Arabic scripts. In my life as an English speaker and writer, it’s used to make combinations of emoji, such as 👩+‍❤️‍+👩= 👩‍❤️‍👩. I’ll talk about how and why this works, and how it might affect the text that users submit and you display.

(If the emoji in this abstract don’t combine into one image on the right, try viewing on a recently updated smartphone.)

Anne DeCusatis is currently a Core Engineer at Meetup. In her spare time, she organizes MergeSort NYC, a feminist hackerspace.


Mark Dominus

Mark Dominus

My favorite NP-complete problem!

NP-complete problems are the hardest problems whose solutions can be efficiently checked for correctness. An efficient method of solving any NP-complete problem would translate directly into efficient solutions for all of them.

Many famous and interesting problems are NP-complete, but this is not one of them! This is the problem of how to distribute “Elmo’s World” segments onto a series of video releases.

Nobody knows a good way to solve NP-complete problems. The Elmo’s World people were not able to solve their problem either.

Mark Dominus first became interested in programming in the mid-1970s from watching his mom do it. He is thrilled to find his bio adjacent to Julia Evans’ and will gleefully treasure his screenshot of this page.


Julia Evans

Julia Evans

How to trick a neural network!

I used to think neural networks were magical black boxes that I could never understand. And they kind of are! But in this talk, we’re going to trick an awesome smart neural network, trained by Google, into thinking a panda is a vulture. Live. And tricking something is the first step towards understanding it! No prior understanding of neural networks or machine learning required.

Julia Evans thinks you can be a wizard programmer.


Jennifer Fernick

Jennifer Fernick

All Together Now! Programming the Quantum Computer

In this talk, we unravel the sublime beauty of programming in an abstract and philosophical way, not by moving away from the laws of physics, but by moving toward them. In particular, I will introduce recent work on programming languages designed for quantum computers, and explain how they are related to some of the biggest questions in computer science, information theory, and quantum mechanics.

Jennifer is a PhD candidate at the Institute for Quantum Computing at the University of Waterloo (Canada). She thinks classical physics is weird.


Andreas Fuchs

Andreas Fuchs

I’m not a number, I’m a free file descriptor!!1 (Our protagonist promptly disappears down a wormhole)

File descriptors are the things that tie Unix programs together — they let your program work with files, sockets, terminals, and even weirder, abstracter-er things!

Our programs can pass file descriptors around via process inheritance, or we can pass them down (you guessed it!) another file descriptor, which is a pretty neat solution to some problems!

But things get REALLY WEIRD and FUN once you realize you can pass those file descriptors down themselves, back to your own program. Why would you do that, and how?! We will find out!

Andreas is a full-time punner and occasional programmer. By day, he builds systems at Stripe, and at night he tries to extract music from a weird instrument.


Lydia Gu

Lydia Gu

Ping! Are you there?

Trying to understand ping is a good excuse for a dive into the networking stack! We’ll break down what all the acronyms (IPv4, TCP, ICMP) mean and then see how they’re used in the ping utility. I’ll talk about how the implementation of ping can lead to security problems.

Lydia is a software engineer at Unlimited Labs. She recently moved to NYC and is excited to join the New York tech scene!


Irvin Hwang

Irvin Hwang

Making a Metaverse! A WebVR (not so M)MO for Programmers!

Virtual reality is upon us! After seeing Brian Peiris’ AMAZING “web-based live coding environment for Virtual Reality” RiftSketch, I was inspired to make my own version. Motivated by questions like ‘What if everything in a virtual world was a separate program?’, ‘What if anyone could look at the code for these programs and create their own within the world?’, and ‘What if this world was as accessible as opening a window in your browser?’, I got to work and using a combination of WebVR, Three.js, and Meteor, I built a prototype I call the Construct Club.

In this talk I’ll describe the programming ideas and tools used to build such a world as well as the potential applications and future directions of the project.

Irvin is interested in the process of finding patterns and abstractions, communities (both virtual and not so virtual, especially related to education, programming, and creativity), and sandwiches. He works at Skillshare.


Rob Jefferson

Rob Jefferson

What Developers and Economists Can Learn from Each Other!

(Note: This talk was originally scheduled to appear at !!Con 2015.)

In the past twenty-ish years, I’ve had a variety of professional roles: sysadmin, researcher, shipping-container-farm designer, grad student in economics, and most recently developer and devops engineer. One of my favorite things is using what I’ve learned in one field in others.

When I began doing development, there were skills and practices I was learning that would have helped me as an economist (writing good tests, modular software design). Similarly, I learned lessons while studying economics that I’ve taken with me to development (recognizing endogeneity biases, making technical decisions at the margin, using feedback to automate processes). There are also things that both developers and economists can and should learn, especially about the limitations of their respective toolkits, as well as the importance of working with compassion and empathy.

In this talk, I’d like to share some of these lessons, with examples of how the lessons connect with each other.

Rob is a Philadelphia dilettante devops engineer working on automating all the things(!). He enjoys parenting, fountain pens, making music, and learning good OPSEC from his kid.


Colin Jones

Colin Jones

Finding out what’s *really* going on, with DTrace!

It’s super-frustrating to run into an issue you don’t understand. I hate feeling powerless like that. But luckily DTrace has our backs!

In this talk, I’ll show you how DTrace can answer incredibly specific questions to test our hypotheses when trouble strikes, and help us to generate new questions and hypotheses. And along the way, it’ll become clear that it’s not as scary of a tool as it might first appear!

Colin Jones is CTO at 8th Light, where he works with teams to craft reliable, maintainable software. He’s into Clojure, security, distributed systems, and performance.


Mariko Kosaka

Mariko Kosaka

Ink on fingers! The history of printing (with code!) before computer screens

What do you imagine when you hear “letter press” or “typesetter”? You might think of the Gutenberg Bible or a hip print shop in Brooklyn, but typesetting machines attracted many engineers’ creative curiosity long before everyone had their own home printer or a website.

The typesetting machine was invented out of “don’t repeat yourself” mentality, and was one of the first machines to be automated. Before we had computer screens, programmers were making domain-specific languages to print images with code. Ken Thompson once hacked on a typesetter to create emoji for his chess machine. Modern software like WYSIWIG editors would not exist if these creative programmers hadn’t put ink on their fingers. Let’s look back at the part of computing history that underlies daily activities like writing documentation in Markdown and reacting with emoji!

Mariko is an engineer who loves data and knitting. When she is not making software at Scripto, she uses code to help her design textiles and organizes a local JavaScript meetup in New York City called BrooklynJS.


Jake Levine

Jake Levine

Sorting is as easy as 1, 2, 3 — but not as easy as a, b, c!

The task of sorting a list of strings alphabetically can sound trivial, but in fact it’s very tricky! We discovered this the hard way when attempting to alphabetically sort a list of names in Japanese. The Japanese written language employs four different alphabets, and an ordering often based on pronunciation. When multiple alphabets are at play, how do computers know what the right ordering should be? And then what happens to the sorting when pronunciations of words change depending on their context? We will discuss how using a Collator can solve some of these problems, and what else you can do in order to address the rest of them. Be prepared for your assumptions about text and language to be challenged!

Jake is a Core Engineering Manager at Meetup in NYC, and currently leads the International team there. He previously studied Software Engineering at McGill University. In his spare time, Jake likes to explore the vast array of culinary options that NYC has to offer.


Diana Liao

Diana Liao

Mixing Paint! With Computers!

Mixing paints is fairly straightforward: with the primary colors red, yellow and blue, you make orange by mixing red and yellow, green by mixing yellow and blue, and purple by mixing red and blue.

But what if you’re trying to mix paints digitally, where the colors are reduced to a series of numbers? Suddenly, things aren’t so straightforward: how do you even blend colors? By averaging the values for the two colors? That can give pretty wonky results: using RGB notation (red-green-blue, the most common in art programs and in CSS — which doesn’t even assume yellow as a primary color!), mixing blue and yellow would give you an…interesting shade of grey. And then what happens if the color isn’t even represented with RGB?

This talk will be an introduction to how computers represent colors, as well as some techniques for how realistic (or non-realistic…) color blending is achieved by various programs and algorithms.

Diana is a college student who studies computer science mostly because they like pretty computer things, and spends most of their time drawing or programming. Or making video games, since that involves drawing and programming.


Laura Lindzey

Laura Lindzey

Convolution and the Fourier Transform: Math! (in pictures!!)

Do you want to understand how GPS or cell phones work? MP3 or JPEG compression? Are you playing with image processing? Solving PDEs? Learning about how to process ice-penetrating radar data used for studying Antarctica? (errrr…that’s me.)

Convolution and the Fourier transform are mathematical tools that make all of these possible. I think that the way these tools are usually presented is intimidating and non-intuitive. I think in pictures, not equations, so this talk attempts to give a graphical intuition of what these techniques actually do and where they can be useful, with examples from my own work.

Laura Lindzey is an ex-physics-major turned roboticist (turned geophysicist). She loves playing with robots and is obsessed with Antarctica, so she is working on combining the two to more efficiently collect scientific data.


Adam Marcus

Adam Marcus

Don’t forget to sketch! Running with large datasets

Large datasets got you down? Have no fear! Make them small! Sketches are probabilistic data structures: they store a rough outline of a dataset in way less space than the dataset itself takes up. We’ll sketch out three sketches to determine if an item is missing from your dataset (Bloom Filters!), count how many of an item are in your dataset (Count-min Sketches!), and count how many distinct items are in your dataset (HyperLogLogs!). In the spirit of the sketch, this talk will be hand-drawn (!!!) and leave some details to the imagination!

Adam is the co-founder of Unlimited Labs, an NYC-based startup dedicated to the future of creative and analytical work. Before Unlimited Labs, he led the data team at Locu/GoDaddy, got his Ph.D. at MIT’s CSAIL, and ate an entire tub of hummus in Jerusalem, where tubs of hummus are pretty big!


Kamal Marhubi

Kamal Marhubi

Storing your data in kernel space: an excellent bad idea!

Normally, when you make a database, you store your data in memory, or on disk. User memory. But what if you stored your data in the kernel’s memory instead? This is a bad idea, but it is possible! Imagine a database where all the data is in pipes! I’ll talk about how to build this, why pipes are so cool, and, briefly, how you can use them to do smart things instead of silly things.

Kamal Marhubi loves programming, systems, and ringing bells.


Allison Parrish

Allison Parrish

Lossy text compression, for some reason?!

Although it had been hovering at the edge of my consciousness for decades, I only recently came to really understand how JPEG compression works. I’m a poet, so once I had this insight—OMG EVERYTHING IS A WAVEFORM—I had to find some way to apply this procedure to text. Compressing text with a lossy algorithm seems, on the surface, to be completely pointless. BUT IS IT?! In this talk I will discuss my experiments with lossy text compression and show how the outputs range from completely useless to strangely poetic to maybe, actually, dare I say it… practical?

Allison Parrish is a computer programmer, poet, educator and game designer who lives in Brooklyn. Her teaching and practice address the unusual phenomena that blossom when language and computers meet.


Mark Phillips

Mark Phillips

Upstream/Downstream: Discovering and Displaying Watershed Topology!

Where does the rain go once it hits the ground? Some of it soaks into the ground, and some of it evaporates. The rest flows into creeks, streams, lakes, and rivers, eventually making its way to an ocean. The route that this water takes is described by thousands of regions called watersheds. Visualizing how these regions connect to each other involves finding and reformatting some public data, a bit of fun graph algorithm coding, and some challenging graphics performance issues associated with the display of 100,000 polygons in your browser! Come see a demonstration of an interactive open source web application that you can use to see everything that is upstream or downstream from any location!

Mark has been writing software and playing in creeks and streams for several decades. He loves the natural world, geometry, and programming, and is especially delighted whenever he’s able to combine all three of these things. He currently lives in NYC and is the CTO of FernLeaf Interactive, an environmental data technology startup.


tef

tef

A million things to do with a computer!

Back in 1971, Cynthia Solomon and Seymour Papert wrote “Twenty things to do with a computer”, about their experiences of teaching children to use Logo and their ideas for the future.

They were wrong: There’s a lot more than twenty. Logo’s successor, Scratch, has over thirteen million things that children and adults alike have built. Scratch is radically approachable in a way that puts every other language to shame.

This talk is about the history, present, and future of Scratch: why Scratch is about ‘coding to learn’, and not about ‘learning to code’.

tef spent half a year working at Code Club, running workshops, talks, and writing articles and curriculum materials for 9 to 11 year olds across the UK. Teaching is hard work, which is why tef left, and now tef reboots computers for money. Scratch is still tef’s favourite programming language.


Anjana Vakil

Anjana Vakil

They’re functional! They’re efficient!! They’re persistent data structures!!!

Functional programming is a cool paradigm to work in, because avoiding mutable objects can save you a lot of headaches! But when you’re using only immutable objects, you have to create a new object each time something changes, which means copying even the parts that didn’t change! This can slow things down, and you might even run out of memory!

Fear not: persistent data structures to the rescue! They save you time and space when modifying objects, by reusing parts of the old object that you don’t need to change! Let’s find out what that means and why it is SO AWESOME! And let’s learn how to easily use these structures in JavaScript!

Anjana suffers from a debilitating case of curiosity, which led her from philosophy to English teaching to speech technology to software development. She attended the Recurse Center (!) in Fall 2015, and is currently based in Germany.


wilkie

wilkie

Preserving Digital Art and Games for 100 Years!

Digital art, both non-interactive and interactive, has been an important part of the digital age. Video games are the most obvious example: interactive real-time art and narrative. There is much more! The demoscene, for instance, is a culture of digital art where people create real-time computer-generated art as close to the metal of the machine as possible. It is sad to see these incredible pieces lost to time.

In this talk, I will discuss a tool called OCCAM that can intelligently determine how to build a virtual machine to run any digital object. We will preserve and run old art and old DOS games within a web browser using tools including, but not limited to, virtual machines and Docker. We will hopefully learn to appreciate art that is old but new to us!

wilkie is a digital archivist and software developer and is not a proper noun.


Mark Wunsch

Mark Wunsch

lol im so random!

Randomness has many applications in computing ranging from cryptography and statistics to generative art and simulation, but where does randomness come from? When you ask for a random number from your system, how truly random is it?

This talk will explore randomness in software practice in a variety of contexts. Touching on sources of entropy, pseudo-random number generation, and what it means to be cryptographically secure, this talk will explore both the algorithms and the APIs that supply us with random numbers. This talk will also cover the mechanisms for testing and verifying statistical randomness. Interspersed seemingly randomly throughout will be some great examples of bots, games, and generative art that use randomness and procedural generation in creative and unusual ways. You will come away from this high-level overview with a newfound sense of respect and awe for the humble Math.random().

Mark Wunsch is an engineering manager who enjoys giving talks on abstruse technical topics. Ask him about AWK! He lives in Manhattan with his wife and their adorable pets.