# !!Con 2018 Notes

A conference about the joy, excitement, and surprise of computing!

12 May 2018

!!Con is a conference held every spring in New York City. It’s two days of lightning talks that can be about anything related to computers!

This conference is a great showcase of the diverse backgrounds of the NYC tech scene. I’m really going to miss it when I move back to the Bay Area.

## Day 1 Keynote

### { }

Mimi Onuoha

• Exploring the implications of machine-readable world through art & programming
• “Embedded in every technology there is a powerful idea” —Neil Postman
• Oral culture: prioritize memory.
• Written culture: prioritize logical organization of thought.
• Digital culture: prioritize data!
• Obsession with data as the object
• Does it mean what you think it means?
• Hard to tell when you don’t have context
• Pathways
• Tracked location data of several groups for 2 weeks
• Met in person to collect: make the collection relationship explicit, forcing people to think about it
• Unable to collect? Common reasons of missing data
• Those with resources to collect don’t have an incentive to know
• Resists “metrification”: things are hard to categorize or don’t inherently generate data
• Nonexistence benefits or protects someone
• Art piece: cabinet of missing datasets
• Filing cabinet with empty folders labeled with names of datasets that don’t exist
• Flip through all the things we don’t know

## Session 1

### Telling stories with traceroute!

Karla Burnett

• How traceroute works
• Packets have a time-to-live (TTL) to prevent getting stuck in routing loops
• traceroute is a hack that sends packets with different TTLs to make different routers along the path respond
• Telling stories through traceroute
• Send fake TTL expired messages from spoofed IPs
• Reverse DNS maps IP to hostname, but the hostname doesn’t have to be real
• Each line of the story needs a new IP: \$3 per month

### Tales of ⌧! Can You Tell Your Story When Your Character Is Undefined?!

Persa Zula

• Small boxes that show up in text when characters not defined
• [ ]: “tofu,” so [X]: “not tofu”
• Displaying characters
• Characters are encoded as codepoints in Unicode
• Font’s cmap table maps codepoints to glyph identifier

### Turning Google Earth into SimCity 2000! (From Light to Pixels to Impossible Perspectives!)

Logan Williams

• Perspective projection
• Farther objects are smaller
• Orthographic projection
• Satellite photo pointing sideways has no perspective: all lines are parallel
• Used in drafting, art, and SimCity 2000
• Only possible when image sensor is same size as object (flatbed scanner)
• In rendering software, set field of view very small so input rays of light are almost parallel
• Doing this in real life?
• Fly over the scene and take the same row of pixels from each frame
• Ensures all pixels formed by light coming from the same direction
• Produce images that represent time in addition to space

### We built a map to aggregate real-time flood data in under two days!

Aruna Sankaranarayanan

• Chennai floods in 2015
• Google only lets you annotate locations, not streets
• Used MapBox to crowdsource mapping during the floods
• 600,000 people used the software, showing that simple tools can be really useful

## Session 2

### Moving towards dialogue: collaborating with your computer using typed holes!

Vaibhav Sagar

• Typed hole: something where you know the type but not the contents of the value
• Can specify in Haskell using underscore _1, _2
• Type inference tells you what the type should be
• In Idris, a more powerful type system also includes list length, so type inference can even help you write snippets of code
• Untyped holes: don’t know what the type is, but still want help writing program
• Open research topic

### Compressing the Library of Babel!

David Turner

• Compressing the infinite library described in Borges’ short story
• gzip?
• Works by finding identical sequences and inserting references back to them
• On Babel: compression ratio is 1:1 because of pigeonhole principle
• Write a program?
• Kolmogorov Complexity = size of compressed data + size of decompressor
• Generation program only a few lines of Python
• Suppose some pages are missing: pigeonhole principle means representing missing books requires storing entire book

### It’s super effective! Solving Pokémon Blue with a single, huge regular expression

Alex Clemmer

• Pokémon Blue
• Little boy leaves home to wander the world and catch Pokémon
• Mostly wandering around in the grass (very tedious)
• Create a regex which accepts iff the moves are a winning game
• How to solve?
• Pokémon Blue is a finite state machine
• Equivalence between FSM and regex (according to “nice book” by “this guy” Michael Sipser)
• Simplify Pokémon to use ASCII world maps
• World map → FSM → regex
• Differences from actual Pokémon game
• Items can have state, player interaction
• Players can hold items
• Game has random encounters (use probabilistic regex)

### Transform live video streams with code and a REPL!!

Mark Wunsch

• Live coding: code improv! Code as the user interface, applied to video streaming.
• Use Racket language and GStreamer multimedia framework
• Write in Racket REPL to manipulate video stream, draw stuff, PIP

## Session 3

### Creating an Arabic Programming Language!

Ahmed Abdalla

• Learning to program requires English proficiency
• Not just keywords, but also error messages & documentation
• English proficiency requires privileged backgrounds in some countries
• Noor: Imperative, Algol-style programming language for kids
• Keywords are simple & informal so kids understand
• Used his Sudanese dialect because languages reflect the aesthetics of their creators
• Arabic editor challenges
• Bidirectional language is overall right-to-left, but English words within Arabic text are left-to-right
• Ligatures required in the language, not just aesthetic

### Evil Twins and the Secret Lives of Linkers!

Josh Bowman-Matthews

• Symbol defined twice in different .o files. What happens when you link?
• Inlining makes a copy of the function inside each .o file
• Therefore, linker is allowed to pick one arbitrarily & not complain
• Don’t accidentally write the same function twice

### Satellites are talking to us! Let’s hear them out!

Ed Medvedev

• “There are only a handful of things cooler than satellites”
• Listening to satellites
• You will need radio dongle for computer & antenna
• Look up online when the ISS will be overhead
• ARISS: Amateur Radio on ISS
• Runs BBS so you can chat with people relayed through space
• Broadcast images & talk to astronauts sometimes

### The joys of PICO-8 token crunching!! Or: what I learned about programming from being restricted on every side!

Ayla Myers

• PICO-8: game engine with retro graphics & sound, but modern programming
• Artificial limits on bit depth, memory, code size (tokens), …
• Built-in editors for everything
• Economics of the PICO-8 device
• “Spent” code tokens to “buy” more sprites
• Can draw PPF curve for tradeoff between e.g. code complexity & number of sprites

## Session 4

### UX for Cats and Dogs!

Joel Potischman

• Problem: daughter moved to college but misses cat
• Manually send cat photos
• Can the cat send us selfies?
• Solution
• Train cats to come eat when the sound is played
• Take a picture of cats while they wait for food
• Feed the cats

### If you could solve this word tile puzzle, you could solve the halting problem! (Too bad you can’t!)

Kamal Marhubi

• Tile puzzle (Post Correspondence Problem)
• Tiles have symbols on top and bottom
• Goal: order the tiles so that top and bottom say the same thing (can repeat tiles)
• Not possible to tell whether a solution exists
• Reducing Turing machine to tile puzzle
• Make a tile from each state somehow
• ???
• Solving the tile puzzle is the same as running the Turing machine
• Wikipedia has a really unclear explanation
• “Some things are actually hard, and some things just have too many Greek letters”

### So THAT’S how my phone knows where I am!

Mike Lazer-Walker

• Positioning throughout history
• Latitude is easy because you can look at the sun
• Longitude much harder, so people dead reckoned based on speed and time
• Solved with accurate clock that allowed using time zone as a proxy for distance
• Urban canyon problem: GPS error gets really bad in cities
• Skyscrapers bounce the signal, messing with the distance

## Day 2 Keynote

### Build skills through hobbies! Bring them to work!

Liz Fong-Jones

• Many years ago, a disowned trans woman who “almost didn’t make it”
• Growth comes from learning new skills
• Playing Puzzle Pirates game (2004–2008)
• Some people made new players work without teaching the game
• Learning mentorship: encouraging people to help newcomers by rewarding them
• Organizing people: conquering an island requires multiple levels of coordinators to solve puzzles & distribute booty as reward
• Active on community forums building diagnostic tools led to first tech job at Puzzle Pirates!
• World of Warcraft (2008–2012)
• Building up new players’ skills to have a stronger team in next raid
• Not all leaders are blameless after the team loses
• Eve Online (2012–present)
• After fleet commander died, there was no communication & everyone else died
• In incident response, “any call is better than no call”
• Value your trustworthiness: not scamming in the game pays off when other players trust with other opportunities
• Factorio (2017–present)
• Learning what’s the most important to automate right now
• Refactoring a complex, running system
• Playing these games taught her management skills in a safe environment before she became a manager for real
• Intentional skill building
• What skills will your next project require?
• Does this activity help me get closer? (Or just mindless play?)

## Session 5

### Relativistic Software Calendars: It’s About Time!

John Feminella

• Software makes assumptions
• About the machine (“integers are 32 bits”)
• About the world (“everyone has a real name”)
• Time is one of these assumptions
• What is time?
• Originally measured by motion of earth & moon
• Calendar is an abstract representation of this motion
• Software calendars bake in assumptions about being on earth
• Enter relativity
• Time distorts depending on the velocity of observer
• GPS is one of the few programs that accounts for relativity

### Undo all the things!

Tom Ballinger

• bpython is a Python interpreter that can undo the effects of expressions
• Works by saving commands & rerunning only some of them
• Could be slow
• Doesn’t work if there are side effects
• Random numbers, time, reading files
• Non-idempotent actions: saving to files, buying shoes online
• Use fork() to save state
• Fork every time you run a command
• Undo goes back to previous process
• Build this into readline() & run with LD_PRELOAD
• Works with unmodified interpreters!
• readline() now forks your program lol
• Building an undo-able Lisp interpreter from scratch
• Save periodic snapshots
• When code changes, roll back to the snapshot before that code was run
• JavaScript version because “the word has to be on the left side of the parentheses or the programming language will never be popular”

### Estimating the Value of Pi with a Dartboard and (Not so Much) Luck!

Stephen Tu

• Estimating pi
• Sample a square uniformly at random
• Percentage inside circle is $$\pi / 2$$
• Estimating with error
• Define an epsilon $$\epsilon$$ which is the error on our estimate
• Define a probability (95%) that the estimate is within $$\epsilon$$
• Need 100x more samples for 10x reduction in $$\epsilon$$

### Ray-tracing and special relativity: Rendering objects near the speed of light!

Lucy Zhang

• If an object is moving near the speed of light, what would a photo look like?
• Computer graphics
• Ray casting: for each pixel, figure out where the light ray from the camera hits in the scene
• Relativity
• Light can never exceed speed of light, even if the light is on a fast-moving train
• Lorentz transformation converts between two coordinate systems that are moving relative to each other
• Relativistic raytracing
• Define the rays toward the object with a 4th parameter, time
• Use Lorentz transformation
• Do intersection normally
• As cube moves faster, it compresses more (expected) & appears to rotate (why?)
• Terrell rotation
• Rotates because farther light takes longer to reach the camera
• Like rolling shutter effect but for relativity!
• Anyone with a computer can “rediscover” Terrell rotation with a bit of code!

## Session 6

### Talking to my past self (without introducing temporal paradoxes!)

Andrew Louis

• Stores all data about himself
• “MSN was this cool software package that taught high schoolers how to type really fast”
• Training a bot on chat logs
• Train RNN to reproduce chat logs from high school
• Sequence-to-sequence to respond to other messages
• Originally developed for machine translation
• Bot tends to converge on safe responses like “lol” and “ya” which work in any situation
• Tends to respond with nonsense
• Why is it hard?
• Training data won’t capture general knowledge about the world
• Needs working memory, not just the previous message
• “Before submitting a conference talk, make sure you’re not committing to solving an open research problem”

### Four fake filesystems!

Omar Rizwan

• Files are anything that you can open, read, write, close using a path
• GrabFS
• Contains screenshots of each process’s windows
• Use shell script with cp to take screenshot every second
• btfs (BitTorrent filesystem)
• Making directory is a search query
• Directory populated with movie files of search results
• Git filesystem
• Exposes remote repository as a directory
• Get to reuse existing tools & UI
• Plan 9 operating system takes filesystem idea to the extreme

### Using Postgres to \watch Star Wars!

Will Leinweber

• Using psql, the command-line Postgres program, to watch ASCII Star Wars
• Import frames as database rows
• Store a function in the database that prints each row

### If at first you don’t succeed at beating HQ Trivia, try cheating!!

Hung Truong

• HQ Trivia is fun but we want to win
• Pipeline
• iOS Vision framework to detect text
• Tessaract library for OCR
• Pick the answer with the most occurrences

## Session 7

### The Man Comes Around: and so does his sound!

Vince Allen

• Johnny Cash did gospel music at the beginning & end of his career
• What are the differences between the two periods?
• Identifying gospel songs
• Topic modeling: assigns words to categories to classify the entire text
• Apply topic modeling to lyrics
• Pick the category with religious terms
• Comparing songs acoustically
• Take a spectrogram of the song
• Convert this to a vector
• I didn’t really understand the rest :-(

### Step by Step: Algorithms that teach you math!

Evy Kassirer

• Building a step-by-step solver for teaching math
• Computer algebra systems
• SymPy can simplify expressions symbolically, which sounds like a solver
• Goal is to get the answer, so they represent division $$a / b$$ as $$a \times b^{-1}$$
• This would be confusing for explaining stuff
• Building their own solver
• Search the parse tree for patterns like “number + number”
• Apply rules to transform to equivalent tree
• Identified which rules were applied to find relevant lecture videos

### Whoa, pictures! A visual history of visual programming languages!

Emily Nakashima

• Visual Programming Languages (VPLs)
• Programming & documentation are all in words
• Our brains are really good at visual stuff
• Examples
• Scratch: Build programs with blocks
• GRAIL (1968): Draw flowcharts which are converted to programs with OCR
• Pygmalion (1975): Visually show state on screen
• Cube (1995): 3D flowcharts?
• Challenges
• Diffing & merging visual programs
• Humans can handle more unique words (symbol names) than unique shapes
• Hard to represent complexity without losing the simplicity of visual programming
• Unclear whether VPLs actually make you program differently
• People prefer whatever they learned first
• Good applications of VPLs
• Simple systems: Twilio phone tree designer
• Kids & learning

### Fast, but not too fast! What 17th-century windmills can teach us about database migrations

Wander Hillen

• Windmill design
• Whole windmill rotates to match wind direction
• When windmill moves too quickly, slats automatically open to catch less wind
• Big changes in load: wind energy increases with $$|v|^2$$
• WeTransfer depends on automation to handle load changes
• Throttle expensive background tasks when the system is busy

## Session 8

### The itty, bitty, tiny bytes that make up a Pokémon!

Jan Mitsuko Cash

• Pokémon data structure
• 232 bytes each
• Stores properties like species ID, experience, nickname
• Backward compatible between generations 1–2, and gen 3 on

### Pseudofractals! Accidental aesthetics where math meets pixels

Jes Wolfe!

• Generate topographical map
• For each pixel, compute color as $$(x^2 + y^2) \bmod 2$$
• Weird artifacts! Doesn’t look like a parabolic topo map at all
• Aliasing
• Caused by Nyquist limit
• If you zoom out too far, frequency of pixels (sampling) is no longer high enough to show frequency of topo map lines
• Making art
• Zoom out slowly to watch the aliasing pattern change
• Use $$(x^2 + y^2) \bmod N$$ and assign to colormap of N colors