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.
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!
Along our journey, we'll acquire some fantastic operating systems tools and incantations you can use to vanquish even the scariest bugs!
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.
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.
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.
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?
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.
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.
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.
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.
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.
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.
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.
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!
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.
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.
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?
(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.
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.
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().
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 accessible 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'.
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.)
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!
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!
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!
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!
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!!!
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!
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.
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!
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.