Console #139 -- Interview with Chris of Apprise - Push Notifications for every platform!
Featuring Yark, SkiffOS, and Apprise
🤝 Sponsor
This space is reserved for sponsors that support us to keep the newsletter going! Want to support Console? Send us a note at osh@codesee.io
🏗️ Projects
Browse through open source projects on OpenSourceHub.io, add your project to get more exposure and connect with other maintainers and contributors!
📹 Yark
Yark lets you continuously archive all videos and metadata for YouTube channels. You can also view your archive as a seamless offline website
language: Python, stars: 1117, issues: 12, last commit: yesterday
repo: github.com/Owez/yark
site: pypi.org/project/yark
🖥️ SkiffOS
Reliably run any Linux distribution on any hardware with a cross-compiled host OS for containerized environments.
stars: 517, issues: 9, last commit: today
repo: github.com/skiffos/SkiffOS
🔔 Apprise
Apprise allows you to send a notification to almost all of the most popular notification services available to us today such as: Telegram, Discord, Slack, Amazon SNS, Gotify, etc.
language: Python, stars: 7166, issues: 44, last commit: 2 weeks
repo: github.com/caronc/apprise
site: hub.docker.com/r/caronc/apprise
Join thousands of other open-source enthusiasts and developers in the Open Source Hub Discord server to continue the discussion on the projects in this week's email!
🎙️ Interview with Chris of Apprise
Hey Chris! Thanks for joining us! Let us start with your background.
I’m from the capital of Canada - Ottawa. I work in the aviation industry and have been in this space for 16 years of my career. Before that, I worked at several career entry-level (career building) spots to get where I am now. I've been developing applications for close to 25 years now (only 20 of those professionally). I think my favorite languages are Python, C++, and C. 15 years ago (or so), I did very heavy development in PHP, so I'm pretty fluent in that as well.
As per frameworks, Django stands out to me for all of the web api’s I would end up developing.
Who or what are your biggest influences as a developer?
I have been lucky to have some amazing professors and managers in my time who pushed me. When I was a junior developer, I had some brilliant minded peers too who always assisted with questions I had. They would have been my influences at the time. I’m Gen-X, so the internet was a 14,400bps modem away when I first started. Yahoo.ca didn’t quite have all the answers that Google and StackOverflow have for us today 🙂. I sure had my share of O’Reily books; that’s for sure.
What is your favorite software tool?
Too many of them; could not just single out 1. I’m thankful git came along and replaced subversion. My life revolves around Linux. I absolutely love Home Assistant. I don’t know where I'd be without KeePassXC; that’s a tool everyone should be using. ssh is part of everyone's day to day life and it doesn’t get near enough credit for how amazing it is.
If I gave you $10 million to invest in one thing right now, where would you put it?
I’ve solved a lot of problems with Ragel and DRBD. These are 2 different tools for very different jobs. But I don't find they get enough spotlight for how magnificent they really are. A diamond in the rough one might say. It would be great to spread the money across these 2 tools.
What are you currently learning?
Nuxt3/Vue3
Why was Apprise started?
It was nothing but a hobby decision; at the time there wasn’t an easy to use notification tool. I also love home automation, and I wanted to go as far as get a notification on my Kodi server (in addition to a text message and email (if i was at work) if i say… forgot to shut the garage door (As an example).
I wanted the library to be easy to adapt so others could use it without having to reinvent the wheel each time they wanted to add a new notification service.
How does Apprise work?
It’s basically a notification demultiplexer; or switchboard. 1 ring to rule them all 🙂. Send a notification to it, and it looks after routing it to 1 or more endpoints (of your choice).
Image Source: electronics-tutorials.ws/combination/comb_3.html
With Apprise, you tell it the notification endpoint(s) you want to send messages to (A, B, C, and D with respect to the image above). There is no limit to the number you want to add.
Each endpoint/service is identified by an Apprise URL you need to provide it. Every service (whether it be Twitter, Reddit, Discord, Telegram, etc) all have different requirements to deliver the notification. The construction of the Apprise URL provides the blueprints it needs to send notifications/messages to it. The URLs look like discord://credentials, tweet://credentials, slack://credentials, etc. Right now I support 85+ different service endpoints, but I'm always adding more. Hopefully I'll get to 100 before 2024.
A lot of services have already adapted Apprise straight into their application.
You can assign tags to the URL’s you define as well. The purpose of this is allowing you to notify more than one endpoint with one call. Consider this configuration file:
urls:
- mailto://user:pass@gmail.com/joe.from.canada@example.ca
tags: joe, friends
- twilio://credentials/555-555-5555
tags: george, friendsYou could notify your friends with:
# since `friends` is a tag that matches 2 entries in the configuration file
# both would be notified in one shot with the command below:
apprise --tag=friends \
--body=”Hey guys, let’s go for dinner tonight at that new restaurant”
Finally i’d share that there is even an API built for it for those who want to store all their configuration centrally
Why did you pick Python?
It’s a fantastic choice for Linux Enthusiasts as it adapts so well. Python really is amazing; I mean there are things it does that are slow, but it’s so easy to write a C++ library to speed that section up if needed to.
Where did the name for Apprise come from?
If you google ‘Notify’, there are too many people that have built jquery apps, or some form of web notification. Apprise is just a less used word and synonymous to Notify 🙂. It’s pronounced as ‘aprize’ (one word, 2 syllables); sounds like “surprise”.
Are there any overarching goals of Apprise that drive design or implementation? If so, what trade-offs have been made in Apprise as a consequence of these goals?
I strived to keep each service very modular. At the end, you can simply add/remove new supported endpoints by dropping in a single file into the /plugins directory.
I also strive (and continue to do so) keep 100% code coverage. I have a test suite that covers every line of code developed; every one. Each time I add a new plugin, it’s tested very heavily to ensure it’s stable and does what is expected.
I tried to be backwards compatible with all versions of Python (all the way back to v2.7). This had consequences… while I supported tons of Linux distributions straight out of the box, it meant for a lot of bloated code in some spots to pull this off. Test cases (and code coverage) to cover all the Python versions wasn’t so fun to maintain either. I’ve since dropped Python 2.7 support after Apprise v1.0 was released.
Finally I'd add that Apprise is a python package that does not depend on a slew of other packages. It’s very clean and self maintained (requirements.txt).
What is the most challenging problem that’s been solved in Apprise, so far (code links encouraged)?
Developers no longer need to keep adding support for new services and deprecating the ones that are shut down, merged, etc. You adapt apprise into your environment and you instantly support a large amount (more added all the time).
I absolutely love regular expressions, and some of the most challenging ones I've ever written and customized can be found in the utils.py file for the common parsing of urls (originally adapted from Python’s source code), and then the handling of Email addresses, phone numbers, etc.
Are there any projects similar to Apprise? If so, what were they lacking that made you consider building something new?
I learned of Notifiers after I had already started Apprise and supported 30+ plugins. It’s very similar in some ways.
Since I got noticed on Hacker News in 2019 there have been different versions of Apprise written in different languages.
Shoutrrr (GO implementation)
Notify (Node/Javascript Implementation)
Novu forked an open source Node/JavaScript/GitHub project several months ago and already has funding for 6.6 Million (which is amazing). I can’t find the link to the original open source github page anymore though.
Courier did an amazing job jumping in the notification space with over 47 million dollars in funding their last round in 2022. There are no ties to it and Apprise. Our systems share a common solution to centralizing notifications.
What is the release process like for Apprise?
100% test coverage
Packaged for PyPi
Release Notes on GitHub
Apprise API updated to leverage new Apprise Package
Notify Discord Channel and just send a Tweet about it 🙂
Is Apprise intended to eventually be monetized?
No, I would never close this open source application away from the public.
What are you most proud of?
It’s just really amazing to see the statistics of its usage on GitHub and PyPi. The 1 millionth download was pretty exciting. It’s great to see it being embedded in so many applications and appear from time to time as a part of YouTuber’s video, Podcast, or just someone’s blog.
I’ve done some other fun projects such as reverse-engineering my own Alarm Panel and building it into Home Assistant (plugin). Now, not only can I be notified (by Apprise) when it’s going off, I can arm/disarm it remotely.
How do you balance your work on open-source with your day job and other responsibilities?
I don’t, Apprise does not earn enough to put too much focus on I’m afraid. My real career and family always takes priority and does consume a lot of my life these days. I do work on Apprise when I can though as I still love it. I want to continue to keep improving on it so that people will keep using it.
Have you ever experienced burnout? How did you deal with it?
I can honestly say I have not burned out. That said, we all hit a wall now and then as developers. There is always that one bug, or enhancement that we just can’t get to work properly. Or we’re just not liking the inefficient solution we chose. In these cases, the public doesn’t ever see my merge request until I'm happy :). I end up sitting on issues for a while. People will think I'm not working on it when in fact I really am, I have just nothing pushed upstream yet.
Some issues I end up dealing with at 2am when my brain wakes me up (with another solution I can try). I can’t sleep until I give it one more go (so i don’t forget).
Where do you see the project heading next?
Lots of outstanding enhancement requests. I see adding persistent storage so Apprise can hang on to details it pulled off of the server it notified (such as allowing for the canceling of a previous notification it sent for the introduction of a new one). Or in cases where an username is looked up to get it’s ID (so notifications could be sent…), these ID’s could be cached locally to save from always requesting the ID over and over again.
What motivates you to continue contributing to Apprise?
Positive community feedback. It’s engaging to see people make their own merge requests against the application.
Are there any other projects besides Apprise that you’re working on?
Tons! But I'll keep them a secret until they’re ready! 🙂
Where do you see software development heading next?
I see it staying pretty status quo.
Mobile Apps will continue to take off and Web Related Development. So node/TypeScript (thus JavaScript) is not going anywhere. Both React and Vue are really powerful and have come a long way
I see C staying around forever since it drives the Linux Kernel which makes up just about everything these days.
I do see Python sticking around as it’s such an easy language to learn/adapt/teach and is embedded in most distributions.
Where do you see open-source heading next?
I hope it flourishes. Most (if not all) of today's technology somewhere/somehow utilizes something it found for free (a library, or a tool) that made a problem possible to solve.
Want to join the conversation about one of the projects featured this week? Drop a comment, or see what others are saying!
Interested in sponsoring the newsletter or know of any cool projects or interesting developers you want us to interview? Reach out at osh@codesee.io or mention us @ConsoleWeekly!