đŸ–Œ Portfolio

Hi there, I’m Andrew. I challenge the assumption that you can only be good at one thing, approach something from one point of view, or be one kind of person. Here is a selection of creative and technical projects, both professional and personal, that I’ve worked on over the years.

Résumé

Of the thousands of rĂ©sumĂ©s that have passed across my desk, the ones that stood out showed the candidate’s creativity using color and formatting to tell a story. My rĂ©sumĂ© uses venn diagrams to show, rather than tell, that I’m a multi-disciplinary person. It has a timeline inspired by the Facebook feed to illustrate the journey of my career.

Symbolic Systems

At Stanford I majored in Symbolic Systems, an interdisciplinary program that brings together computer science, philosophy, linguistics and psychology. People from diverse backgrounds come together to study the overlaps between these fields, and my concentration was in human computer interaction. One lasting effect was my approach to asking similar questions when comparing the diversity of computer languages and human languages.

Throughout my career, my most successful projects have been grounded in the type of systemic thinking that I learned in this program. I always try to ask questions like: What are we building? What is its reason for being? What is its nature? What are its principles? If you get these things right at the beginning of a project, it sets you up for success down the road.

Website

I use my website to document my life experiences. I like to make lists of all the places I’ve been, and the places I want to go. These are grouped into categories like cities, countries, geography, nature, buildings, infrastructure and trains. Looking back and looking forward, I feel like things are in balance when those lists are about the same length. My website is a manifesto on simplicity, and consists of just HTML and emoji, with almost no images or scripts.

Flags

A lot of travel pages on my website have flag emoji that indicate where the things I’ve visted (or want to visit) are. I wrote a program in Swift to read the HTML pages on my website, count the number of flags of each country on each page, and show the totals in an HTML table. About 90% of the program was written using ChatGPT prompts, saving me time and letting me focus on the parts of the program where I was adding the most value.

Countries

Wouldn’t it be great to have a summary of all the things I’ve visited in each country? Building upon the Flags project, I wrote a program to parse all the pages on my website and create HTML pages with everything in each country.

Computer Languages

I’ve tried to port my interview question solutions to thirteen programming languages. Even while maintaining a reasonable degree of fluency in all of them, it can be hard to remember the subtle differences, so I made a giant cheat sheet of things I do most often in all the languages. I even built a mileage chart style graph that shows the precent similarity between different languages, giving me some fascinating insights into how they’re related.

Human Languages

I speak English, Russian, French and Dutch. Sometimes for fun when I’m listening to pop music, I like to translate the song into Dutch in my head in realtime to see if I can keep up. I made a web page that translated the titles of some of my favorite songs to Dutch, and a total of nine languages while I was at it. I used the same algorithm for comparing computer lanugages to make a milage chart of human languages, empirically demonstrating the similarity of Germanic, Romance and Slavic languages.

KavaSoft

I started KavaSoft in 2002, with the dream of writing applications for the brand new Mac OS X operating system. I started by porting one of my favorite games from the original Macintosh, which became iConquer. Over the next nine years I released a suite of apps for organizing your photos by content, sharing your favorite music, downloaded images from websites, sorting your movie collection, translating text in apps and much more. This was a decade before the app store, so I had to work out distribution, payments and software updates in order to make KavaSoft into a profitable enterprise.

iConquer

The original game of world conquest for Mac OS X! iConquer is based on a version of Risk that was one of my favorite games for the original Macintosh. It features stunning high-resolution maps based on satellite photography, and a variety of computer player personalities based on artificial intelligence algorithms. A community of developers contributed maps, player algorithms and language translations.

iConquer Maps

Making iConquer maps was a graphic design project of its own. Whether mapping countries in the world or neighborhoods in a city, I started by compositing satellite imagery at what was at the time insanely high resolution (using 4K about a decade before it was cool). I created an Xcode plugin that allowed third-party developers to contribute maps to the iConquer ecosystem, and was surprised by their creativity: everything from the solar system to a “boss mode” that let you keep playing on an Excel spreadsheet.

Shoebox

Shoebox lets you organize your photos by content, and find the photo you want instantly. It’s like a knowledge base for your photo library, with hierarchical categories that let you define the times, people, places and things that define your world. For example, if you tagged a photo of the Eiffel Tower, you could find it when searching for Paris or France. You could import photos from your camera, back up to DVD, and even create searchable websites.

KavaTunes

KavaTunes creates interactive websites that look and work just like iTunes on your computer. Visitors can browse through your music and playlists, and even play music by streaming it from your computer. The home page and artist pages feature personalized top ten lists like most played albums and songs. You can even browse music just as if you were holding an iPod! KavaTunes can also search the internet to add cover artwork to your music.

KavaMovies

KavaMovies lets you organize the movies you’ve seen, the movies you want to see, and the movies in your collection. It connects to IMDB and downloads tons of information about each of your movies in realtime. Movies are linked together by actor, director, genre, keyword, and more; making it easy to surf through all the movies you care about.

HyperImage

There are millions of images on the web, but how do you find and download them without clicking on them one at a time? HyperImage is an industrial-strength tool for searching the web and downloading entire websites worth of pictures. Just enter an address or keyword, and watch as thousands of pictures stream down to your computer. HyperImage knows about the structure of popular websites, can easily download entire blogs, and is also a full-featured Tumblr client.

KavaServices

KavaServices can add commands to the Services menu that let you translate text, search websites, encode special characters, calculate mathematical expressions, process text in numerous ways, and even run terminal commands! These commands replace the selected text in any Mac application, just like magic. You don’t need to switch to a different program, or even copy and paste.

KavaSoft Store

It’s hard to believe now, but there was no App Store in 2002. When I started KavaSoft, I had to build out the entire infrastructure for the KavaSoft Store to help customers discover, download, purchase and update their apps. The system integrated with APIs from payment processors like PayPal and Kagi. I even wrote a Mac license manager app for monitoring sales and assisting with customer service.

NDS / Cisco

NDS was the world leader in television set-top box middleware, the operating systems that run on cable and satellite boxes. As part of the New Initiatives team, I helped develop proof-of-concept systems to maintain thought leadership in the television space. When NDS was acquired by Cisco, I engaged with the developer community to build excitement about advanced technologies in telepresence, indoor navigation and smart cities.

Service Delivery Platform

The world of cable and satellite set-top boxes is completely separate from the world of consumer devices. What if we could build a platform to let developers write apps to a single standard that would make them compatible with television platforms around the world? The NDS Service Delivery Platform offers APIs to get schedule information, see what’s playing, act as a remote control, schedule recordings and play back recorded content.

I was responsible for developing an ecosystem of client apps to demonstrate the potential of the platform. I worked with marketing to engage with both television providers and app developers to sell the dream and turn it into reality.

Home

The film Home by Yann Arthus-Bertrand features stunning aerial photography from around the world. This second screen app for iPad shows satellite maps of the locations featured in the movie, zooming from one location to another as scenes change. The location menu lets you jump between scenes, for a non-linear viewing experience that transforms the way in which you consume content.

Social Zapper

If all your friends like a TV show, you probably will enjoy it too. Combining the power of the SDP and Facebook APIs, Social Zapper reinvents the traditional schedule grid by showing which of your friends like each show that’s on right now, even allowing you to reorder the channels based on the popularity. It can also recommend shows that you might want to binge based on the overall popularity in your social network. This prototype was later incorporated as a feature of Bento, our cloud-based STB interface.

Top Gear

This app demonstrated the potential of SDP for rich syncrhonization of time-based metadata between a set-top box and an iPad second screen. As you watched the “star in a reasonably-priced car” segment in an episode of Top Gear on your TV, you could use your iPad to follow their progress around the race track. Playback state was syncrhonized in both directions, so you could hit fast forward on your remote control or in the app to make the car go faster
 or even drag the red dot along the track to scrub back and forth on the TV. The seamless link between the screens was magical.

Surfaces

Imagine if video screens could be as large as you wanted, the size of an entire wall or table? Surfaces was a project that explored the possibilities of creating scalable displays, pushing the relevant content to a number of tiled screens. I created clients that would allow widgets to span adjacent iPads. You could literally drag a widget from one iPad to another, even if one was running a browser and the other a native client written in Swift.

Flare

Flare is a concept ecosystem that combines indoor location technologies, wearable devices and an object-oriented data model to help people explore interior spaces and interact with objects in their environment. I implemented the backend in Node, the API layer, and frameworks and demo applications for web, Mac, iOS, Apple Watch, Android, Android Watch and Python. I released an SDK and developer documentation on Ciso’s DevNet developer portal, and hosted hackathons in which external developers used the SDK to develop projects. I presented the platform at the National Retail Federation trade show in New York, giving demos to the engineering leadership of a hundred major retail companies.

Twitter TV

I did a hacakthon project in which I replaced the entire SDP context and control architecture with one based on the Twitter platform. Your set-top box had its own account and would tweet what you were watching, along with the title card and a description of the episode. Then you could DM your STB with messages like “watch @topgear”, and it would find that show in the grid and change channels for you. Got it up and running in four hours.

Social Highlights

When watching an Apple keynote, there are parts that are more exciting than others. I tried making a highlight reel of the iPad 3 launch, which took hours of my time. What if we could do this automatically by measuring the volume of tweets on a particular hashtag like #ipad during an event? I wrote an algorithm to do exactly that, and made an auto-generated highlight reel. The money shot? When they announced the pricing. Turns out the reel based on hashtag buzz was pretty much the same as the manually curated one. Proved a point in about half a day of work.

Privacy

I gave a presentation on privacy considerations in the context of building a personalized television platform. In a world where many people want to share everything about what they’re doing, would we consider your television viewing history to be sensitive personally identifiable information? Everyone knows that the Queen watches television, but can you imagine if the shows she watched turned up in the tabloids? The talk covered the important points of what privacy is, why it’s important, how to protect it, and specific learnings applicable to our current projects.

Connections

I designed a poster for the 2013 NDS developer conference in Bangkok on the theme of “the power of an object oriented system lies not in the objects themselves, but in the connections between them.”

Compass

Compass is the #1 real estate brokerage in the United States, and also a tech company that creates software to make its real estate agents successful. I joined when engineering had 60 people and over five years watched it go through a period of hypergrowth to 1200 engineers. It was also my chance to move into engineering management and build several awesome, high-performing teams.

Marketing Center

Beautiful marketing materials are a core part of the Compass brand image, but with the massive growth of the brokerage it became untenable for designers to make them by hand. My team and I worked with marketing to essentially distill the brain of a designer into an app called Marketing Center, so agents could make high-quality materials using a self-service tool. It gave them enough flexibility to differentiate themselves while at the same time keeping everything on-brand.

Window Displays

Marketing Center lets Compass agents create a variety of kinds of print marketing materials, including the listing cards that are displayed in office windows. I worked with the marketing team to create these layouts and implemented them as templates in Marketing Center. So when you walk by a Compass office and see listings in the window, I made that happen.

Farm Brochure

When you’re developing software, you tend to run a program over and over in test mode. But the experience is totally different when you’re using it for real. One day I used Marketing Center to make a brochure for my own farmhouse in the south of France, and had it professionally printed. I put a lot of love into that brochure, which gave me an entirely new perspective on the software product that my team had created.

Marketing Automation

The Compass Marketing Center app made it easy for agents to make any kind of marketing materials, assuming they knew what they wanted to make. But it was still a challenge to remember what materials for what listings they needed to make when, and to decide which collateral types and templates would be most effective. I led the Marketing Automation team in building a system to coordinate an agent’s overall marketing strategy, using AI to give every agent the experience of having a dedicated marketing coach.

Agent at a Glance

As Compass scaled organically, agent information was spread across twenty different systems. The first team that I managed built a user adminstration tool called Agent at a Glance (A3G), which let our agent support team get the full picture without having to sign in to multiple systems. We took full advantage of a microservices-based architecture, with each service storing or retrieving a single type of data.

Fuzzy Name Matching

Identifying the same people in different databases can be a tricky problem. In an ideal world, people would all have a unique identifier that we could use to join records across databases. However, when this is not available, it may be necessary to try to use people’s names for matching. As it turns out, people’s names can be messy, and are less suitable for use as unique identifiers than you might hope. I wrote a blog post about fuzzy name matching, and you can look at the source code.

HTML to PDF Conversion

Marketing Center lets users design print-ready marketing materials such as flyers, brochures, postcards and notecards. It outputs web content, which needs to be converted to a PDF that it can be sent to a print fulfillment vendor. I wrote a blog post about writing a Go service to convert web pages to PDF using headless Chrome.

Interview Questions

When I was at Compass I developed a set of coding interview questions that candidates were unlikely to have encountered before. I tried to make questiosn that were fun and interesting, and related to the real world in some meaningful way. I also wrote up solutions to the questions in thirteen different programming languages, to try to force myself to approach each problem from many different different perspectives.

🔱 Four Fours

When I was young a friend presented me with the four fours problem: using just the number four exactly four times, can you write a mathematical expression that evaluates to every number from 1 to 100? I wrote an interactive explorer in React that helps candidates visualize the question. It’s an exercise in finding the simplicity in what seems like a complex problem, working forwards from what you do know instead of trying to work backwards from what you want to find out. See the solutions in several languages, including an elegant one-liner in Clojure.

🧭 Subway Directions

This problem asks you to write a program to calculate the time that it would take to commute to the Compass office using the New York City Subway. You can walk to a station, take a train to another station, and from there walk to the office. As an extension, you can add the ability to transfer between trains. I made an interactive subway map that helps people visualize the algorithm. It’s a fun interview question because it gets candidates thinking about coming to Compass!

⛓ Wiki Links

Here’s a fun party trick. Go to any English language Wikipedia page, and click on the first link in the body of the article. Keep doing that, and you’ll go from concrete to increasingly abstract subjects, most likely eventually arriving at the articles on Existence or Awareness. Given a list of recently featured articles and the artciles they link to, the task is to construct an outline. The challenge is that there are no root nodes, as you typically get into a loop of articles that link to each other. I’ve heard candidates remark, “wow, you’ve changed the way I think about existence and awareness!”

🃏 Pontifex

Pontifex is an encryption algorithm featured in the book Cryptonomicon by Neal Stephenson. It allows two people to exchange encrypted messages, as long as each of them has a deck of cards. Encrypting and decrypting the message uses a process called shuffling as described in the algorithm. In porting my solution to different languages I wound up writing some JavaScript that looked remarkably like Clojure, the closest I’ve seen to “having an accent” in a programming language.

🚉 Subway Countdown

Train schedules contain a lot of data and can be hard to read. In 1885, EJ Marey invented the graphical train schedule, which represents the entire schedule as a graph of the position over time of each train on the line. For this project I made an animated graph of the New York Subway’s 7 Train, including a display of the train arrival countdown board. You can even simulate the effect of delays, try setting it to ”total chaos”.

Magic Names

At Compass I noticed that some people had first names that were the same as other people’s last names. I made a directed graph that showed how everyone’s names were connected, and kept it up to date as the company grew over the years. I made a magic names interview question that asked candidates to build a graph structure, count the number of clusters of each size, and find how many people were in the “big cloud”. Seeing how the results changed if they added themself to the graph gave candidates a sense of belonging!

đŸ’” Hashcash

Cryptocurrencies are designed around proof of work algorithms, which essentially prove that a computer burned a certain number of pointless processor cycles. They do this by calculating checksums of a large number of values until they find one that by chance ends with a specific number of zeroes. Hashcash is a protocol that uses a similar approach for avoiding spam: if email senders have to waste even a small amount of processor cycles, it’s the digital equivalent of buying a stamp.

📩 Functional Objective-C

Functional Objective-C is a category that adds functional programming methods to Objective-C. Going beyond foreach, filter, map and reduce, it adds around 60 methods and was inspired by the Clojure cheatsheet. I even used it to convert my Four Fours implementation into a one-liner, as inspired by the Clojure version! The whole project is tongue-in-cheek, a work of art that is beautiful and useless at the same time.

Apple

When I was young I was fascinated by the original Macintosh, and knew I would work for Apple one day. I was ironically still considered “the Apple guy” even when I was working at Apple. It was an incredible time to work there, as the results of Steve Jobs’ transformation bore fruit: Mac OS X, the iPod, the iTunes Store, and retail stores. Oh yeah, and my email address was andrew@apple.com.

Apple Sales Web

I was part of team of three software engineers that developed Apple Sales Web, an app that resellers around the world used to connect with the company. It was implemented in WebObjects, a technology that Apple got from NeXT for creating object oriented web apps connected to relational databases using the same foundation that Mac and iOS apps use today.

Apple Retail Web

My team adapted Apple Sales Web to support the company’s own stores, helping communicate with retail employees and ensure consistency between stores, especially when rolling out design updates and new products. Everyone at Apple is entirely responsible for some small aspect of the business; I wrote the code that got the shopping bags from the warehouses to the stores. Every time I saw someone walking out of a store with their purchase in a bag I felt a little bit proud.

User Admin Site

I developed an internal admin application to help our admin team provide support to our users. One of the great things about building internal tools is that you can observe people using them, and make small improvements that save them a huge amount of time. At Apple even the internal tools are elegant and beautiful, and I made a library of widgets that let our WebObjects apps look just like the recently released Mac OS X operating system and its Aqua interface.

MacUpgrades

My first job was selling and fixing Macs at a small shop called MacUpgrades. I was particularly good at sales because I was very knowledgable about the products and believed in what I was saying. Back then, memory came in modules that snapped into the logic board, which was easier to do in some models than others. Computers broke all the time and you needed to have them fixed. I dyed my hair bondi blue for the launch of the original iMac.

Mac Collection

I had a pretty extensive collection of Apple computers and related materials, and donated most of it to the Computer Museum of the University of Amsterdam. So you can go visit their Zamler-Carhart wing of Apple technology. Two of the models I’ve kept are a Macintosh Plus (1986) and Macintosh SE (1987), which I spray painted red and purple, respectively.

BANG Presentation

In 2002 I gave a presentation at Apple on an early version of iConquer to the Bay Area NeXT Group (BANG). It focused on things I’d learned as a developer writing an application for the relatively new Mac OS X operating system.

KavaFoto

KavaFoto was my brand as a photographer. The KavaFoto website was powered by Shoebox, letting visitors browse all my photos by category. The home page has a high degree of randomness, pulling random photos from random categories to suprise you every time.

Concerts

For three years I was the de facto photographer of the composition department at the Royal Conservatoire in the The Hague. I documented over a hundred concerts, using my Shoebox program to organize photos and present them on the KavaFoto website indexed by event, venue, composer, performer and instrument.

Composers

I made microsites for some of my composer friends that pulled content dynamically from my own site. Whenever I took a picture of them or one of their compositions, it would automatically add fresh content to their microsites without any additional work on my part.

Fashion

Considering I’m more likely to take pictures of rocks than people, it was ironic that I had a fifteen minute career as a fashion photographer. I shot a fashion show at De Haagse Hogeschool and worked with a number of models in The Hague.

Kick the Can

Kick the Can was a protest against the intrusion of commercialism in the Dutch academic music scene. To make the point, two friends and I physically kicked a can 22 kilometers from Rotterdam to The Hague. I designed a poster series to promote the event (patterned on “Yes We Can”), and documented the protest concert. One professor remarked, “we haven’t had this kind of spirit around here since the sixties.”

Photo Books

Here are some books that I made of my photo portfolio in 2005-2006.

National Geographic

In 2001 we sent photo albums to all of our family members, each with a card in the format of a National Geographic cover that highlighted the selection of photos. We must have done something right because one of my aunts didn’t get the joke and thought it was a legit magazine cover.

Etc.

Hiking Maps

When I was in the French countryside during the first wave of covid, I adapted that hobby to exploring every trail around our house. I recorded every walk with my Apple Watch, imported the route into a program called IphigĂ©nie, overlaid the paths on topographic and satellite maps, and printed posters that I could hang on my wall. I even made walking patterns in the fields, like spirals, fans, zigzags and figure eights. When I lived in Dakar for three months during the second wave, I adapted the same approach to an urban environment, walking the perimter and all the major streets of the city, and making some fun “street art” designs.

Shake Shack

The Shake Shack project is designed for teaching students who are new to programming how to build a full-stack web app. It can store the menu in a MongoDB database, load the data in a backend service and serve it up with a REST API, and connect to the API to load a dynamic web page. It's everything you need and nothing you don’t!

Wordle

I wrote a Wordle solver in Swift that basically plays the game for you. Each time you guess a word, you enter in the response that indicates which letters are in the right place, wrong place or not in the word. It will then provide a list of the best words for you to play next. From my point of view, I’m not cheating: I just took my own strategy and taught the computer to do it for me.

Dutch Dictionary

I significantly improved my Dutch comprehension by reading the book De Ontdekking van de Hemel by Harry Mulisch, considered to be the master work of twentieth century Dutch literature. I wrote a program in Objective-C to process the text of the book, break apart compound and conjugated words, translate them to English, and create a dictionary of Dutch as used in the book. The dictionary is in the form of a tag cloud, with more frequently used words in larger text, and words with common prefixes grouped together.

Painting

I did a wine and painting team building event one time in which I painted a photo I took of a vintage tram in Lisbon. My phone kept going to sleep and I had paint all over my hands, so I wound up kind of painting it from memory rather than looking at the original while I was working. It turned out a bit abstract, but not bad considering that I was in a rush to finish in 45 minutes. I had the original photo printed on canvas so the two could be displayed side by side.

History Paper

I like to stay in touch with my high school teachers at St. Albans. While I mostly think of myself as a techie, I think that my European history teacher Ted Eagles had the biggest effect on shaping my world view. On a visit in 2010, I wrote Ted a twenty page paper on the Evolution of European Empire Building, constrasting the European Union with the Soviet Union. As one does, just for old times sake.

John Irving

The author John Irving refers to a number of recurring themes in his novels. I made a table, based on data from Wikipedia, on which themes occur in which books. With his most recent book The Last Chairlift, he’s obviously trolling his fans because it contains all the themes.