An Interview with Charlie Monroe, Developer of macOS Apps Permute & Downie
Who are you, and what do you do?
I'm a person who graduated from a college (software engineering masters degree) and decided not to contribute to someone else's dream, but rather to build my own one. So I started my own software company, built a few apps (and acquired a few along the way), focusing on communicating with the customers myself. To me, it's always frustrating getting support from someone who has learned a few phrases, but has no idea about how everything works. This is why to this day, I like to answer my customers' support queries myself instead of hiring someone.
How did you get interested in that?
My father is a freelance graphics designer (now retired), so computers (Apple ones at least) have been around the household for a long time (since 1993 or so). This got me interested in the computer world in the first place. Initially, I was quite happy just digging around the system and peeking around with ResEdit (ha! Who remembers this gem? https://en.wikipedia.org/wiki/ResEdit). As I dug more and more into the system, I got more and more interested in creating something as well.
At first, I got to play around with Pascal, then REALbasic (now Xojo), and finally, at the age of 17 or so, I got to learn Objective-C. I actually had my first shareware apps out on the Internet when I was 15 or so and I sold license codes via Kagi which was an e-commerce platform back in the day and I remember getting the first check and being so excited about this.
Reading this back and seeing all the now-defunct services and apps, kind of makes one feel a bit old 😬
What resources would you recommend for people that are interested in what you do?
Apple has a wide range of sample projects and sample code on their site, ranging from simpler to more complex, so that's always a good place to start. I was always a bit of a self-taught man, so as I dug around the system, I experimented and learned from my mistakes. I cannot say that I'd recommend that to everyone, everyone needs a different approach.
But what I'd stress out: don't forget the basics. It's nice to learn how to make some UI with a few lines of code. When you see something on your screen, it always appears a bigger accomplishment than spending hours on some algorithm that doesn't show on the screen, but allows more efficient computations in the background and therefore more responsive app for the end user.
Go low and start with how a CPU works, what are instructions, learn about syscalls, about algorithm complexity. Even if you develop web apps, it's all quite connected. It seems like some unnecessary evil that would get pushed onto you at school, and I'd seen it this way back in my school years as well, but it turns out that it changes your perspective on how to do things. Usually towards a more efficient and better design of the app (internally, we're not talking about UI).
What tools & gear do you use? (Could be hardware, software, something else entirely.)
Nowadays, it's becoming less important which computer do you have. Even low-entry Macs are powerful enough to compile the apps quickly enough so that you don't need to wait for longer periods of time. Of course, the faster the computer, the faster the compilation, but you usually only feel this when you are compiling release builds for the public. I currently run an iMac Pro with a second display, but am eyeing a Mac Studio in the future (waiting for an upgrade). Nevertheless, when I'm on the go, I develop on a MacBook Air (M1) and I don't have any issues with that (other than the small screen).
Software-wise, I use Xcode along with a few in-house made apps for helping me with managing localizations and app distribution - e.g. an app that builds all the other apps and uploads them to all distribution channels.
Besides the tools, what routines help you get your work done?
I think that like most developers, I like order. I'm an early bird, so I wake up at 6AM, grind the coffee and put the coffee drip on, and sit down at the computer. I answer all support queries that are pending and then I focus on the actual development. On weekends, I usually wake up at 7AM and do the same, but I usually stop around 9AM and enjoy the free time.
For a person working from home, the most important thing is self-control and the will to push yourself to work. I think many of us have experience with that from the past few years.
Thanks for reading Syntopikon! Subscribe for free to receive new posts and support my work.
I found your work through Permute, which I've used for thousands of conversions. What inspired you to develop it in the first place?
This is actually one of the apps that I've acquired. A long time ago, I was working with Stephen Korecky from Chicago and we developed this app. Unfortunately, it wasn't in the stars to keep working together - I was still studying and Stephen had a full-time job. The app was not enough to support both of us financially, so we had to keep finding other sources of income which lead to Permute being neglected. After college, the app was half-abandoned with no specific vision for the future. So I founded my own software company and later on, I acquired the apps we've done together with Stephen.
Permute is a great tool to switch media files between various formats and it's been extended over the years to do so much different things. The idea behind it always was to make something that's simple, (unlike the world of media formats itself) that anyone can use, yet powerful enough that even more professional users can find it useful.
Another app you developed, Downie, lets people download YouTube videos. There's an adage about developing things that you need, and they'll find an audience. Why Downie vs. something like youtube-dl from the terminal?
When I finished college, I was struggling with what to do. Many people, parents included, were trying to push me towards getting a stable job at some company. But I had a different vision for my future. I wanted to make the decisions, I wanted to create something, make something that other people enjoyed using. I felt I was always a creative person and seeing myself as developing someone else's vision isn't really something I wanted to pursue. Don't get me wrong, I'm not a person who doesn't tolerate other people's opinions, I just wanted to create something that I could shape and mold with my own hands (and mind).
And I was looking around for an idea. One day, I needed to download some YouTube video for a video project I was making and I looked at the available options. None of them looked easy to use and most of them supported just YouTube and nothing else. So I decided to make my own app. To be honest, I hadn't heard of youtube-dl until a few years ago and while many people may think that Downie is using youtube-dl or a similar tool under the hood, Downie is a 100% native macOS app - originally written in Objective-C and then re-written in Swift, but in either case, all link processing is custom code written by me - there's currently about 250 thousand lines of code that make up what Downie is today.
In either case, Terminal is something that power users may use, but not an average user. It's not user-friendly. That was my main push towards making this app. And — it's been almost 10 years. Downie will turn 10 next October. Which to me is almost insane - but also incredible.
Now you're working on CMPlayer, which'll let people play videos (that they can download via Downie, or convert with Permute). There was also Rottenwood, an app that let users keep track of movies they saw. All of these have a media focus, specifically video. Why the interest in video-focused apps?
Both apps are something that came out of my own need.
Rottenwood is a passion project. Being a movie fan, I soon started forgetting movie names, so was looking for a simple solution where I enter the movies I've seen. Additionally, it allows you to browse these movies in a graphical way which makes it easy to pick a movie that you are currently in the mood for. This was the whole idea behind it.
CMPlayer is unfortunately fairly delayed. The idea came to me a few years ago, but I haven't gotten to it - being a one person-company, it's hard to find time for new projects... Anyway, I am struggling to find a good iTunes (now Apple Music) replacement as well as a simple video player. There used to be an app called Enqueue which was a simple player, but it stopped working with some macOS release and it seems abandoned now. Which is a shame.
How do you get the word out about apps you create?
It's increasingly hard to get the word out as there's just so much content these days, I admit that. And it's been from the very beginning. It took years for me to get the word out - it takes baby steps - one article at a time, one review at a time, and so on. To be honest, I haven't put too much effort into getting the word out, I mainly focused on making the apps and hoped that people will see the quality behind that and the word will spread. I've put my heart and soul into my apps and hope that it shows.
What do you enjoy about developing for the Mac over iOS?
I enjoy developing for both platforms, but as a user, I prefer the computer over mobile devices. I don't know if it's the small screen, or the lack of a physical keyboard, but I feel that one can work more quickly and efficiently on a Mac. And as I've mentioned, the ideas for apps that I develop usually rise from my own need. I have a few iOS app ideas floating around my head, but haven't gotten to them yet...
How can Apple make the development experience for macOS better?
The main improvement that they should focus on (and I can see them working hard at this) is keeping up with iOS. They've put a lot of effort into iOS and iPadOS over the years and it feels at times that macOS is being neglected by Apple. This has improved in the past few years with Apple Silicon and recent macOS releases. An example would be Apple finally adding the Weather app for macOS.
This is something easily noticeable by the user, but this goes for the underlying frameworks (that we developers use) as well. There were frameworks that were introduced for iOS one year and added to macOS the next one. Which is a shame as it hinders development for macOS and it makes it harder to maintain common code for both platforms. It seems that this has improved in the past few years and it's Apple's objective to keep the platform frameworks in sync. Let's hope that they can keep this up.
You also paint. How do you come up with ideas about what to paint?
As I tend to say, my paintings are what keep me sane. All thoughts, nightmares, dreams and the world around me, combined together on a canvas. They are a reflection of the world as I see it, as well as how each individual sees the world - every person is able to find themselves in the paintings - whether in a positive or negative way.
How do you relax or take a break?
Aside from painting, I also write poetry (actually, this year I became a published author - my first book of poetry was published), but I also enjoy woodworking, wine making (out of almost anything - bananas, apples, pineapples, peaches, elderberry, ...), playing pool and so on. I try to keep my options open when it comes to free time and enjoy doing something else every time.
Whose work inspires or motivates you, or that you admire?
This could be a very long list :)
But in general, I admire all the forgotten people who push humanity forward. All the physicists, chemists, engineers, doctors, and so on, who work hard on extending the knowledge of humankind. These really are the forgotten heroes of our time without whom we'd be lost and wouldn't live in the luxury we enjoy today (as opposed to 100 years ago). Just empty your pockets and look at everything that was in them - ranging from credit cards, car keys (which nowadays are almost a small computer), phone (which is really a computer that's way more powerful than whatever you've used 20 years ago), but even something as ordinary bank notes - just think of all the ingenuity that goes into all the counterfeit measures that are within a single bill - all the dyes, layers, ... No one seems to really think about these things, but it just shows how complex the world has gotten without anyone realizing it as everything is nicely packaged.
So my motivation comes from within my fascination by common objects that are not that common when one realizes how much effort and ingenuity was put into them. And I try to mimic this with my apps - I try to make something seemingly simple, but try to put a lot of effort under the hood, trying to push the app to the next level.
Thanks for reading Syntopikon! Subscribe for free to receive new posts and support my work.