A conference about the joy, excitement, and surprise of computing!
23 Feb 2019
!!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
At the beginning of last year’s !!Con, I wrote:
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.
Fortunately, I spoke too soon! This year, we got !!Con West, held at UC Santa
Cruz, which might be the UC campus with the most redwood trees. Here are my
Day 1 Keynote
The Best Parts! Of My Favorite Things!
- Version control
- Branches like having three thoughts at once
- Semantic versioning
- Quickly tell which releases are likely to be broken
- Public and private APIs
- Progressive disclosure: read public APIs to understand quickly; private
when you need to know the details
- Infrastructure as code
- Communicate changes by diffing code
- Automated documentation generators
- “Trick programmers into writing more” because you just write directly
into the code
- Copy paste
- Put all the potentially copyable code into a repo so you can copy-paste
them in the future
- Document model and relational model
- Popular so you can always get help
- Package Managers
- “Automated copy pasters”
- Node business cards: “websites but for terminals”
- Web micro-frameworks
- Just do one job and not try to take over the whole project
- Web (macro-)frameworks
- When you need most of the website done for you
- Error contexts
- Programming languages
- Python: “My literal mom”
- Ruby on Rails: Makes your code look cool
- Rust: learn memory by fighting the borrow checker (hope you don’t have a
- Golang: binaries in regular build process
- Conclusion: tell your friends about your favorite things
IMUs FTW!! Building IMU-based gesture recognition!
- Harry Potter gesture recognition wand
- Compute to run the algorithms
- Raspberry Pi is big but runs TensorFlow, easy to prototype
- Cannot run Python on Arduino
- In hardware, experimentation costs money instead of just time
EarthBound’s almost-Turing-complete text system!
- EarthBound’s text system
- EarthBound is a Super Nintendo role-playing game
- Looks like normal game with normal text options
- Actually a tiny virtual machine that’s quite complicated for its job
- Instruction set
- Registers: working, argumentary, secondary. 4 bytes each. 2 sets of
registers that can be swapped.
- Normal instructions: text input/output, set flags, jump if flag set,
jump and return
- Game-specific: set HP/level of players, movement in the game world, show
- Extremely CISC: summon bicycle, summon photographer, teleport
- Why study it?
- Mod the game
- Make a patch that turns it into a totally different game
- Build high-level language that compiles to this virtual machine
/etc/services is made of people! (and also ports!)
- List of services, their ports, protocols, and… email address?
- Email addresses are the people who wrote the RFCs to reserve those ports
for their services
- API for getting service names: can map back and forth
telnet lets you use both
- How do you get into
- Becoming less well known because many services restrict
themselves to 80 and 443 to get through firewalls
- About 400 ports left – not too late!
- Fill out a form
“Wheels within whiles!” or possibly “Whiles within wheels!”
- “I’m about the same age as the stored-program electronic computer”
- “Could the analytical engine emulate the difference engine?”
- Difference engine: stack of adding machines for producing math lookup
tables of 7th order polynomial approximation
- Analytical engine: more complex, closer to modern computers
- Why emulate?
- PowerPC Mac to Intel: run your old software on your new computer
- To learn about old computers or games that no longer exist
- As an easier way to study old computers even if they exist
- Try out future designs
Sadly, I had to leave early on the first day.
Day 2 Keynote
Glitch Nuggets of Resistance!
VJ Um Amel
- Data body (as opposed to real body): made of SSN, GPA, SAT score,
immigration papers, …
- “VJ Um Amel” is the name of Laila’s data body, which is her performative
project over the past few years
- Media theory and practice professor
- Studies the artificial world
- Concerned with suitability for a purpose
- Arab Spring: young people designing society through social media
- Group of young Arab techies developing things
- Glitch: problem in a computer system
- Maspero incident: protesters interrupted (“glitched”) Egyptian state’s
Guiding a starship with noise! And blinking!
- How does New Horizons navigate to take pictures of things?
- 1.6 kbps downlink best case, 0.5 kbps worst, 6 hours one way
- Picked the first Kuiper Belt Object they saw
- Determining the flyby parameters
- Need to preprogram the flight plan
- Spacecraft location from radio tracking
- Onboard optical navigation to control perpendicular motion
- Don’t know the range! Guess based on limited orbit data for the object
- Using Hubble images to find the orbit
- Combine uncertainty of Hubble direction & uncertainty of object location
- Combine multiple observations from many amateur telescopes on earth to
get the size uncertainty down to kilometers
The secret life of Not-a-Number!
- IEEE 754 allows implementers to provide diagnostic information
- Set all exponent bits to 1
- For the mantissa, set the first bit to 0 if it’s a signaling NaN, which
should cause an exception when touched
- Other bits can provide diagnostic information (51 bits of space for a
- If valid floating point, do the computation
- Otherwise, look at the NaN bits which tell the type of the variable
- Booleans will fit because only have two values
- Pointers: 48 bits max, so it works
they can be indexed by a 32-bit integer
Hacking Lego! Computer generated Lego instructions!
- Likes working with Lego, but unfortunately it doesn’t pay well
- Lego mosaics: building low bit depth images with Lego
- Can we do this in 3D?
- Build a tool to convert models to Lego using voxel grid
- Merge voxels with the same color into taller bricks
- Export each layer to Lego CAD software
The world’s first racing-the-beam ray tracer on discarded FPGA hardware!!!
- Pano Logic G1 thin client
- Had no CPU! Everything is “in hardware” (FPGA)
- Very cheap because the company went out of business
- Reverse engineer the board & want to render graphics on it
- “When you buy a big GPU, you have this urge to make it work at capacity.
It doesn’t matter what it does.”
- Racing the beam: Atari frame buffer had only two lines & had to render
one line while the other got sent to the CRT
- Prototype in C code to count how many operations needed per pixel and
know how much hardware you need
Robots, rockets, and more! Control theory in 10 minutes
- Control theory is everywhere, even non-obvious applications like queue
length in a network
Minimax search and the structure of cognition!
Zack M. Davis
- Minimax search
- Could look at all possible moves & pick the one that results in the best
- To have better long-term decision making, then search the opponent’s
best possible responses, then your best possible response, …
- Simple algorithm that implicitly encodes many chess behaviors
Postgres plays Pokémon!
- Query your Pokémon in Postgre
- Read the Gameboy emulator memory in a Postgres extension
- Works because Pokémon info is stored at known addresses
Software patterns… from the 9th century?!!
- 70s garbage collection paper: once half of memory is used, copy all the live
objects to the other half of memory
- Medieval farmers: split field into two parts, alternating back and forth to
allow farmland to recover
- Why should it be half? Why not plant 2/3?
- Dependencies of this change: plant legumes to restore nitrogen, deeper
plows, horses, oats for horses…which needs better farm productivity
- Cycle in dependency graph
- Not just a technological change — important social considerations
- Rearrange field ownership to allow longer fields for easier plowing
- People don’t want to make a change that risks starvation
- Our technology can support many things, but people don’t always want to
make big changes
How to throw out 95% of pixels in virtual reality, without anyone noticing!!
- 95% of the eye’s photoreceptors are concentrated at the fovea
- In virtual reality, your fovea covers a small percentage of the
screen size (compared to phones)
- Use neural net to guess where people might look, then compress everything
How to calculate the phase of the moon very, very badly!
- Calendar app for werewolves required calculating the phase of the moon
- Look up the day of a full moon, then add 27.321661 days every time
- Worked for awhile!
- 2 years later, it was about 3 days wrong
- Using the wrong number & can’t use the average
- User interface
- 28 moon icons, so just bucket the floating point moon phase
- Multiple days could have full moon icon depending on rounding
- Solution: assign full moon icon to the day that contains the full moon
Value Your Types!
- Dependent type: a type whose definition depends on a value
- Example: list of integers where each value is larger than the value
The Conjuring: ransomware edition!!
- Goal: show that demonic posession (e.g. in The Conjuring) is similar to
- Initial entry: always looking to (posess, infect) vulnerable hosts
- Needs a unique (item, encryption key) to perform the ritual
- Symmetric key: malevolent entity uses a secret word to posess host,
where the same key is used to decrypt
- Some randomware uses the date and time to generate keys, which are easy
- (Demons, malware authors) don’t like (exorcists, malware analysts)
- Ransomware developers sell their malwre to ransomware opeartors, either
one-time fee or revenue share
Observability in the Kitchen: Improve Your Breadmaking Skills with Open-Source Monitoring!!
- Sourdough healthier than regular bread, but requires long fermentation
process (about 1 day) and could mold if you’re not careful
- Prometheus: open source system monitoring server written in Go
- Raspberry Pi with temperature & humidity sensors
- Write exporter for sensor to Prometheus
- Highly over-engineered sourdough starter process!
Computers are fast! But how come they sometimes feel slow?
- Latency matters to making computers feel instant, letting people use
computers more effectively
- Input latency of a game depends on many things: human reaction time,
keyboard interrupt, OS, application drawing stuff, display buffer & response
My, my, TTY!
- 1960s–70s: paper teletypes let you write on one typewriter and print on
another connected typewriter
- 1970s: UNIX written on PDP-11; login always local because teletype was
directly wired to server
- 1970s–80s: video display terminals (“glass teletypes”) emulated paper
teletypes with more features, like control sequences, introducing complexity
- BSD shipped database of terminals and supported features
- 1980: BSD added curses library, allowing easy GUI building in terminal
- Late 1980s: Stanford University Network workstation (or SUN for short),
Macs, Windows PCs, X11 killed video terminals by bundling terminal emulator
- New features: setting title, colors, mouse clicks
- “If you absent mindedly click on the menu, it actually works, which was
kind of horrifying to me the first time it happened”
- People switch from telnet to SSH
- Stuff we use today is influenced by a long history
- Bell used paper teletypes, which is why they made
ed (actually a good
editor when you have paper)
- Berkeley bought video terminals, which is why we got