Update 11-03-12

If you'd like to try out something that is a little less 'ambient', but much more polished, please see Status Screen Saver.

Update 10-18-2012:

Due to unfortunate circumstances, I lost the pkg I created. Please feel free to visit the project on GithubGitLab and compile using Xcode. Because of the recent changes to the Growl architecture, I can't say for certain if my plugin still works. I haven't used it recently, but welcome the project being forked and updated.

Update 11-17-2010

I've re-approached this project and gotten it working again (with Growl!). The source code for the screen saver, the growl component, and a CLI test app are all available on githubGitLab at the following URLs:

I'm not providing binaries for these since the project is pretty unpolished and still mostly intended for advanced users. All it should require is compiling with a recent Xcode and double clicking the .saver or .grownview target.

Update 8-1-2010

I haven't done anymore work on this lately, I hope no one is disappointed. I also think I may have lost the growl portion of the code after thinking it was in the same folder as the screensaver, and that not being the case. In order to prevent such foolishness in the future, I've pushed the screensaver source code on githubGitLab. http://gitlab.com/bettse/AmbientNotify

Update 10-29-2009

After getting an email from someone interested in this, I dusted off a bit of the code. Since Snow Leopard has been released, as well as a new Growl (1.2), I figured I should update as well. So far Growl is not playing nicely, but I did get the screensaver recompiled for Snow Leopard (may not work with Leopard anymore, not sure).


Since I've dallied so long and still not written the Growl configuration panel, I've decided that I should put the code out before it becomes stale and never sees the light of day. There are two parts to it, the screensaver (.saver) which just needs to be double clicked to install, and the Growl plugin(.growlview), which needs to be copied to ~/Library/Application Support/Growl/Plugins/

Screensaver and Growl Plugin

Towards the end of last term (fall 2008), as a final project for my object oriented programming class, I was asked to write a program that made use of OO design, and do so in a language I had little to no experience in. I had been kicking around an idea of an ambient notification screensaver for things like new emails, IMs, rss items, etc for a while before this, and this seemed like great motivation to do it. Since I had no experience with Objective-C, I decided to use Xcode and create a screensaver for my Mac.

The project went well, and by the end of the term I had a screensaver that had a white outline of a box and any new email, rss, im, etc would trigger a script in that program to write to a temporary file, then that file would be picked up by the screen saver and produce a colored ball that would bounce around within the box. It was sufficient for class, but I didn’t feel like it was where I wanted to stop the project at. One thing was that bouncing balls was simple to do, but I’d always imagined something closer to electrons swirling around a nucleus as the model for the notification’s movement. I tinkered over this term with it and had a little bit of success, but not much until this last week.

Inspired by a conversation I had with some friends on the way to lunch, I reopened the project and looked into adding pseudo gravity to it. This was actually much easier than I expected.

Next I once again looked into Growl as a means of getting notifications; When I’d first started the project I only found the Growl API documentation for sending notifications to Growl and had dismissed it as a lost cause. This time around I looked into both the way Growl relays notifications over the network, as well as its display plugins. I was pleasantly surprised to find that writing a plugin was straight forward, and with my experience looking at the networking code, I knew how to connect the Growl plugin to my screensaver.

Today I finished with the basics of it and now have a working prototype that I’m quite proud of. There is still more to do, like perhaps changing from pseudo gravity to a form of elastic physics, or adding on a configuration panel so my Growl plugin will forward notifications to a different plugin if the screensaver isn’t active. Once at least the second issue is taken care of, I plan to publish my code and some instructions on installing. In the meantime, if anyone is actually interested in seeing it, just drop me an email (see my resume for the address) and I’m more than happy to send what I’ve got so far.

© 2021 Eric Betts