!!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!
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 notes.
Contents
Day 1 Keynote
The Best Parts! Of My Favorite Things!
Lynn Cyrin
- 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
- Autocomplete
- Postgres
- 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
- Good messages save time
- Containers
- Programming languages
- Python: “My literal mom”
- Ruby on Rails: Makes your code look cool
- JavaScript: Learning async
- Rust: learn memory by fighting the borrow checker (hope you don’t have a deadline)
- Golang: binaries in regular build process
- Conclusion: tell your friends about your favorite things
Session 1
IMUs FTW!! Building IMU-based gesture recognition!
Jennifer Wang
- 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!
Alex Rasmussen
- 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 sprites
- 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!)
Breanne Boland
- 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 both22
andssh
- How do you get into
/etc/services
?- 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!”
Michael Albaugh
- “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
- Design
- 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 propaganda broadcast
Session 5
Guiding a starship with noise! And blinking!
Simon Porter
- 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 in image
- Combine multiple observations from many amateur telescopes on earth to get the size uncertainty down to kilometers
The secret life of Not-a-Number!
Annie Cherkaev
- IEEE 754 allows implementers to provide diagnostic information
- NaN:
- 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
double
!)
- Use case: JavaScriptCore NaN Boxing
- JavaScript needs to track the types of variables
- 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
- Integers: JavaScript arrays can only have 232 values so they can be indexed by a 32-bit integer
Hacking Lego! Computer generated Lego instructions!
Michael Knowles
- 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!!!
Tom Verbeure
- 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
Session 6
Robots, rockets, and more! Control theory in 10 minutes
Wesley Aptekar-Cassels
- 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 board position
- 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!
Liz Frost
- 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?!!
Michael Arntzenius
- 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
Session 7
How to throw out 95% of pixels in virtual reality, without anyone noticing!!
Amrita Mazumdar
- 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 else
How to calculate the phase of the moon very, very badly!
André Arko
- 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!
Eric Weinstein
- Dependent type: a type whose definition depends on a value
- Example: list of integers where each value is larger than the value before it
The Conjuring: ransomware edition!!
Pranshu Bajpai
- Goal: show that demonic posession (e.g. in The Conjuring) is similar to
randomware
- 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 to guess
- (Demons, malware authors) don’t like (exorcists, malware analysts)
- Ransomware developers sell their malwre to ransomware opeartors, either one-time fee or revenue share
Session 8
Observability in the Kitchen: Improve Your Breadmaking Skills with Open-Source Monitoring!!
Daisy Tsang
- 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?
Mike Lazer-Walker
- 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!
Tabitha Sable
- 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
apps
- 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
vi
- Bell used paper teletypes, which is why they made