My C++ journey and how I found Synergy
Fun fact, Synergy was written in 2001 by Chris Schoeneman, and I didn’t actually start working on it until about six years later, in 2007. Back in 2001, I was a teenager and had other things going on...
Some of the first code I wrote was when I was in high school. Way before I’d ever heard of “phishing”, I thought it’d be fun to see if I could get my hands on people's Hotmail passwords in my school year (no malicious intent, just curiosity to see if it could be done). I asked an Internet-friend, who was a Perl coder, for some help. He showed me how to write a simple script that took a username and password and logged the text to a file. With no idea about the legality of what I was doing, I copied the Hotmail homepage and linked it up to my new script.
[Edit: I stirred up some controversy by sharing this story about teen-hacking, albeit something that happened over two decades ago, but it forms an important part of why I fell in love with programming, and it's one of the most pivotal moments on my path to eventually learning C++ and working on Synergy. So I decided to keep it.]
After finishing my new masterpiece, I enlisted the help of another friend, this time from school (who was a bit more popular than me) to convince some classmates to enter their Hotmail username and password into the fake page. Absolutely in disbelief, I checked the text file a few days later, and there were the email addresses and passwords of people from my year group. My friend had showed off some top-class human engineering skill! I decided not to use the information. Looking back, this was quite risky, but as a teenager, I was a little bit of a rebel. In case you’re wondering, I didn’t actually embark down the path of a black hat hacker, and once I’d realised the power of code, decided to use it for good instead of evil.
After realising that I didn’t have an appetite for crime, I decided to create something I could tell my parents about. In the days of Counter-Strike (the original version, before Condition Zero and Global Offensive), another friend of mine—this time, a PHP coder—had an idea for a gaming clan website generator. After we spent some time talking about it, we both got super excited about the concept and I pretty much spent all of my time coding what I now know to be some pretty awful PHP (SQL queries within for-loops… makes my eyes water to this day).
We tried for a while to sell subscriptions to the clan site generator, but sadly it didn’t catch on; back then, I wasn’t great at marketing and the app needed a lot of work... so many reasons why we didn’t make it big with that one. We did sell a few subscriptions though, but not enough to keep going.
After getting a taste for cash, I decided to try my hand at being a freelance software developer, making websites and apps for small businesses in the town where I grew up (in the Isle of Man). Not the Isle of Wight, that’s a different place. Chances are you’ve never heard of the Island, but it’s famous for the TT races and being a low-tax economy (with no capital gains tax, wealth tax, stamp duty, or inheritance tax, and a top rate of income tax of 20%). I enjoyed running my one-man-band, but needed some extra cash. After graduating from the local college on the Island, I got a job as a software developer, but then got fired for talking too much.
Getting fired wasn’t a pleasant experience, but it gave me a better opportunity to further my C++ skills. My friend asked “Hey, why don’t you tag along with me and come to university?” Like a scene from the movie, “Yes Man” starring Jim Carrey, I pulled the trigger without giving it a second thought.
On arriving at the Aberystwyth University, I remember the Head of Computer Science saying to me “Your grades aren’t good. We can fit you in, but you’ll need to try really hard.” He gave me a shot, and I’m grateful for that. I met a lot of incredibly smart people at university and used it as a chance to improve my C++ skills. I’d love to say that I tried really hard and finished with a 1st degree, but I decided to continue trying to run a business while studying and suffice to say, it led to poor grades (and maybe I also partied a bit too hard). Anyway, I did graduate, only just, with a 2:2 degree (that’s not great, but it was good enough).
While at university, I really got a taste for writing C++. The university had just built a Visualisation Center (named the See3D building) and I was lucky enough to be one of a handful of students to get access to the toys inside. I decided to create a 3D stereographic DICOM MRI scan visualization app (yes, it’s a mouthful) and named it ViMRID. The idea was that doctors could use this app to visualise MRI scans (DICOM files) in a 3D space to more easily identify breast and prostate cancer. It was a bit ambitious, and I actually managed to get the stereographic code to work through trial and error (in the days before VR was mainstream… oh boy was that cool).
So, the computer in my dorm room was Windows, but the machines that ran the 3D stereo projectors at the See3D building were running Linux. Well, I didn’t want to ditch my beloved Windows computer—always a gamer at heart—so I decided to write the C++ code cross-platform (not the easiest thing, but I find that sort of thing quite fun). Turns out, logging into the Visualization Center computers via SSH to test my code was a kind of tedious, and virtual machines (VMs) back then were kind of slow at rendering desktops (and, well, often still are). So, I did what any rational person would do: tried to juggle two computers at the same time.
But, as you all know, using two keyboards and mice on one desk is super awkward. I’d used KVMs in the past, so I immediately ordered one. If you’ve ever used a KVM, the next bit is no surprise: Upon using the KVM, I was reminded of the clunky nature of KVMs that I had previously experienced. Clunky, because they essentially just electronically unplug and reconnect your mouse and keyboard every time you press that button on the front of the box… this causes all sorts of weird behaviour if you’re doing it many times per day. After ordering a couple more KVMs and seeing the same results, I gave up and decided to look for another solution.
Back then, Googling “share keyboard mouse one computer” didn’t bring up the Synergy website as it does today—either that or my Google-fu was super weak, I don’t remember exactly—and ShareMouse didn’t exist at the time. So, with the incorrect assumption that nothing existed to solve this problem—remember, Synergy was created by Chris in 2001—I began coding my own solution. As part of this, I started asking questions on technical forums about the various OS APIs; what functions to call, etc. Not before long, one developer said “You should try Synergy, it actually already does that.”
I discovered a somewhat neglected SourceForge project that was being intermittently maintained by a very small group of enthusiasts, just for fun. Chris, the original creator had landed a dream job at Pixar, and so couldn’t afford the time needed to fully maintain the project. Delighted that I didn’t have to implement this solution from scratch myself, I jumped on the chance to bring Synergy back up to speed. There was so much that I wanted to fix, and after a couple of years committing code to the repo, and discussing issues on the mailing list, I established myself as the “Project Leader”.
After graduating from university, I was kind of burnt out and decided to park the idea of running a business. That 2:2 was just good enough to get a job writing C# .Net code at a software company in Surrey, UK called Ascom. We were working on mobile phone network testing software, and while it was quite interesting, it didn’t light a fire in my belly. I would have loved to get a C++ job, but it seemed that my skills just weren’t developed enough, and perhaps my grades did hinder me somewhat.
Not content with the work I was doing during the day, I decided to continue working on Synergy in the evenings, sharpening my C++ sword. I’d wake up, spend 8 hours at my C# day job, then spend the remaining 8-10 hours working on Synergy in C++. Not before long, I found myself working on the fledgling open source project until 4am some nights. Red eyed and tired, I was on my way to my day job one morning and almost caused a car crash. I drove on to a roundabout, at speed, without looking to the right… I could have easily died, as the car already on the roundabout just missed me. I decided that day to write my resignation letter.
That night I called my Mum and said “I’m thinking about quitting my job and working on Synergy full time.” The inevitable barrage of concerned parent-oriented questions ensued… “How are you going to afford your rent?” “This is a crazy idea, have you lost your mind?” “Please don’t quit your job.”
I quit my job (kids never listen). And started asking for donations via the Synergy website I had created. To my absolute surprise, people were donating $100… $200... $500. This was crazy, why would perfect strangers give this kind of money to someone that they’d never met expecting nothing extra in return? Well, turned out people were extremely grateful that someone was just looking after Synergy in any capacity; they were depending on it for real business applications. It wasn’t long after that when Pixar approached me and said “We just want to make sure you guys keep doing what you’re doing” and signed up as our first business customer.
Though the donations were generous and totally unexpected, they were only just enough for me to pay rent. I wasn’t able to hire anyone to help with the burden of maintaining the code. So, after a lot of deliberation, I decided to put up a paywall (meaning, you had to pay to get the download). I got a few death threats (really), but thankfully they subsided as people got used to the idea. This allowed me to then hire a team, grow a company, name it Symless, and the rest is history!
Want to join me on my journey of building the best keyboard and mouse sharing app on the planet? Symless is hiring C++ developers to work on Synergy.