Probability Tree

The personal site of Joseph Agreda

Filtering by Category: Featured

Digital Signage

One of the first tasks assigned to me at my new job, was to build a digital signage system for the main library on campus. They had already secured and spent their funding on several Mac minis, some Apple 30" Cinema Displays and a 55" Samsung TV. They had found a software solution that they wanted to use, Billboard CE, an offshoot of Billboard which is NC State's digital signage system. The one problem though, was that Billboard CE was mostly an unfinished port from their source and wasn't really ready for us to deploy, so my job now became to either find an alternative, or to build some software glue to tie this all together.

Some caveats. First, this was about a year ago, and the money had been spent much earlier, so the Mac minis were of the previous generation, which for our purposes means that they lack the graphics power of the most recent minis. We didn't have much more money to spend. We didn't want to BootCamp all of these to run an off-the-shelf solution, and this needed to be done quickly.


Before I dive into the software side, a few notes about our hardware implementation. Doing this all over again would be considerably easier with current hardware, but I digress. Each installation with one exception is comprised of a Mac mini and a 30" Apple Cinema Display, the exception being the main entrance setup on the second floor which has the large Samsung TV. Two components doesn't sound that bad, but then you have to take into account that the old Mac mini has a large external power supply, as does the cinema display, and the mini requires the use of a DisplayPort to dual-link DVI adapter to output to the 30" display. Also add in some wake from sleep and reboot issues with the dial-link DVI adapters, and so to be safe, we're powering them off of an independent USB power supply. Contrast this to using current equipment, where the current Mac mini employs an internal power supply, as does the 27" LED Cinema Display, and since the 27" LED Cinema Display has a mini DisplayPort cable to start with, no messy adapters to fiddle with.


My background in programming is a weird and long story that I'll get to someday, but the important part is that my recent experience in web development has largely centered around Django, a powerful Python framework. The systems department in the library is a mixed bag of programming experience, with plenty of very competent programmers with experience in say, Perl, PHP or Fortran. They've deployed a couple of WordPress installs to deal with certain parts of their main web site, but all-in-all, there isn't really an institutional standard here. So I jumped around and built some basic signage apps with Django, and toyed with a Rails apps that could accomplish the same thing. The basic requirements being that the app run in a fullscreen web browser, such a Plainview, and have the ability to rotate through what more or less amount to slides.

The design was pretty straightforward but took a lot of mocking up and some testing to get to a point where I felt comfortable with the visuals. I went through what books the library had, and did some reading online, but found surprisingly few definitive resources regard digital signage. The most useful book I found was written primarily for physical and static architectural signage. It was helpful primarily in font consideration, both for type faces, weights, and knowing when you need diversity. For the digital side, my best friend was the WCAG (Web Content Accessibility Guidelines) published by the W3C. I looked to the WCAG primarily for guidance regarding colors, contrast and color brightness. The WCAG also had some good advice regarding font selection, but for my purposes was mostly a mirror of what I found in print, which was to avoid scripted fonts.

As for what I ended up with, we have a clock and date in the upper right, set in Lucida Grande, and other titles and text are set in Helvetica Neue. There's something about times, dates and email addresses set in Lucida Grande that I like and find very readable. The overall theme is dark for a couple of reasons, the most obvious reason is to allow the slides to stand out. It's also dark to contend with the lighting conditions in the stacks, which is relatively dark to begin with.I want the displays to be as bright as possible without blinding our patrons. The perfectionist in me isn't satisfied with the design, so I'm continually making small adjustments and changes here and there. All of these changes will culminate in a new and hopefully more balanced font layout in the near future.

I've got an app more or less ready to go. Mission accomplished. Except for this minor matter of maintainability.

Problems of Maintenance

I was hired using federal stimulus funds, so my job is expected to exist for around two years. No one in my department has any experience with Django, and very very minimal experience with Python, to say nothing of Rails or Ruby. Crap.

Some discussions and a few meetings later, it becomes clear that if I'm going to be a Good Programmer™ and deploy something that they can fix and update themselves, it's going to at least have to be in PHP and ideally, based on WordPress. I've toyed with WordPress plenty of times, and I've set up several sites and blogs using it as a base, but I wouldn't have called myself a PHP programmer. It's not a terribly difficult language to pick up and use though, so it wasn't a big deal to replicate the core functionality of my Django app. Blend in a little mix of WordPress plugins, some template hacking, and now we have a functional digital signage system. It's not perfect, and can't be modified and extended in quite the same way as my Django app could, but it gets the job done, and will be able to stay alive without my continued presence.

Afterthoughts and Looking Ahead

Never underestimate the need for maintainability. This is a hard lesson I've been learning over the years. Even if it isn't asked for up front it's foolish to design without it in mind. The less someone asks about maintainability, the more screwed they'll most likely be a couple years down the road, and if you're out working somewhere else by then, it'll come back to haunt you. This encompasses everything from the frameworks and languages you use, to how you document your code. You do document all of your code, right?

This was just under a year ago and quite a few things have changed. I've made several modifications to the design since it was deployed, and continue to make more changes, especially on the front end. The hours display has always bothered me so along with another initiative to consolidate the way we hand hours information, that display will only display today and tomorrow's operating hours, leaving some more room for other bits of information. We may be getting another sign installation with actual professional-line digital signage monitors and a newer Mac mini.

Overall, I'm happy with how things turned out on the technical side. It's a stable solution that gets the job done, and is pretty easily managed. As always, things could be better given more ideal circumstances with regard to time, money and environment. But somtimes, you just have to go with what works.


This is entirely random. But the more I think about it, and evaluate my employment options come May, the more I get the feeling that I'm a Product Person. First, a few counter-points.

I love/hate math. Really, I love logic, which is why I am repeatedly drawn back in computer science and engineering stuff in general. Nothing beats pouring through tech specs on a new device or technology. And I do love the thrill of squashing that bug and troubleshooting something into oblivion. But when it comes down to algorithm design or optimization, I start to glaze over and I get bored. It's not that it's hard, it's that after a while, something so deeply mathematic starts to bore me and I look for something more broadly complex. Something larger.

I understand networking. Well. Not only that, but the history of the stuff is fascinating as well. But I can explain TCP/IP, and "how routing protocols help route routed protocols" (Cisco CCNA 3.0). Routers, switches, and big telco metal are tons of fun and do present the kind of troubleshooting and design challenges that I revel in on a technical level. Elegance in network design and the knowledge that our fiber link isn't going to collapse upon itself like so many dying stars is tremendously rewarding. But here again, I eventually get bored. Things are always exciting yes, but they do start to fall into patterns for me, and things can become so process oriented and slow (for good reason) that creativity is often stifled and the new and dangerous don't really have a chance to flourish.

Then, there's Product and Design.

Both are essentially creative endeavours, and both (in the right org) are going to be pushing the envelope to something prettier, more useful, faster, and so on. Moreso than design, I see Product as being a sort of 3,000 feet high view of a single product/design/problem with the fun problem-solving part being the before, during and after "vision" fiddly bits. The way my brain sees it, is that when designing and guiding a product, you're constantly solving a puzzle. If you're lucky, you start at the beginning so you get to choose your foundation and initial direction, in either case you're having to be consistently one step ahead, choosing the next move in anticipation of what will follow, and steering the big ship on a dime (as some would say) to course correct for any missteps that follow. In my experience, the fun parts always come together in crisis, such as in the STS mission simulator when you're acting as Flight Director and you just realized that the Shuttle has lost usage of two fuel cells and is in the middle of a docking maneuver with the ISS. The best of times are often the worst of times, if for no other reason than you survived.

At the end of this midnight excursion, I finally found the perfect analogy for all of this. Chess.

Chess club taught me two things. 1, move your pieces forward quickly, aggressively, and intelligently (react, not reactive). And 2, never ever underestimate the power of dumb luck.

Good night.

The Blogging Cake

When I think about blogging, and all the tools we have to make the task simply easier or possible at all, I can't help but think of a layer cake. I'm going to dive into a bit of an analogy ride here (I am a big fan of analogies) partly to help explain the concept of a blog to my peers and friends who keep asking me to try and explain it to them. If this is simple stuff for you, just move along, this will get interesting in a later post. To define a "blog" in the terms of a dictionary, we would start with something like "a Web site on which an individual or group of users produces and ongoing narrative". In other words, a site that is regularly updated, can also suffice. The use of the word has become so broad that it requires some hands-on use and some refinement.

On with the cake.

The analogy only carries so far, so bear with me. At the base, where the cake is biggest, we have regular old blogs. This site being an okay example, but also other WordPress blogs, Blogger blogs, MovableType, Django-based blogs, etc. Blogging software or systems that allow full and complete (for the most part) customization of the interface, and addition of new functionality through the use of plug-ins or other software.

The second layer in the cake is something called LiveJournal. I first got started with the thing back at the end of middle school going into high school. Needless to say there's a lot of junk there, typical ramblings and rants of a teenager. Had it been a few years later, it could have just as easily been a "MySpace Blog". Same stuff. But nowadays LiveJournal has evolved into essentially, community blogging. There are thousands of group journals that people contribute to covering a massive array of topics. This has been seen before, it was called Usenet, or newsgroups. It's also pretty similar (when you get into the commenting threads) to a typical online forum or other bulletin board system. But really the majority of LiveJournals are personal, structured like blogs, and themselves tie into the greater community at large. Moderately sophisticated commenting tools allow other users to start threaded conversations about that post, or something else entirely. So, LiveJournal allow people to blog in a more or less watered down way (it's hosted, so a lot of the magic sauce is behind closed doors), and it's community centric.

Now we get into the third, somewhat smaller, layer in our cake. Services such as Tumblr and/or Pownce. Now I know there are others in the area, but let's keep this simple for the time being. These services are not intended to directly compete with a service like Blogger or WordPress, rather, they are along the vein of something called a MicroBlog. In this case, Tumblr is a specialized MicroBlog, while Pownce is a bit more broad and generic. Tumblr for instance, is focused on acting as a simple and easy to use online scrapbook. So you post all the neat little pictures and video clips you come across online to Tumblr and your friends can come on up and see them or they can subscribe to your Tumblelog (like one subscribes to an RSS feed). Pownce has a similar capability of allowing you to post up images, audio, video and text, but both have a focus on quick and short posts. They are not set up to carry on extended stories or conversations. Although there have been some creative uses in that application of these sorts of services, that's not the focus.

Which brings us to my favorite part of the cake, the top. The best example I have, is a service I use all the time and love, Twitter. Keep in mind this is a hierarchy of content types/styles, not necessarily the winners or losers or anything like that. But here we get into a really interesting idea. Twitter is rather unlike Pownce or Tumblr in that it not only does not allow you to attach images or videos directly to your "tweets" (posted updates), but you are limited in how many characters you can upload in a single tweet, 140 chars to be exact. Twitter has found a plethora of uses, notably the idea of a "lifestream", the posting of your day, play-by-play. For instance, you could be tweeting weather updates on your way to work on the train while also tweeting about a news story you noticed in the newspaper while tweeting what you're eating for breakfast. Not all at once mind you, but you get the idea. Others use it in much the way one might use, tweeting URLs of interesting things they come across online. There are many more uses we could get into, not to mention the communication theories that are at play here, but I'll save that for another post. Here, we're just getting the lay of the land.

An important thing to note with all of these, is there are a number of ways to interact with these services. Most notably, Twitter, which has in my opinion, the best desktop companion to the service. It's called Twitterific and is a wonderful Mac application that sits in your menu bar and totally changes the way you think and interact with Twitter. Someone else already gave a pretty good explanation on his views on the matter, but in short, when you use Twitter through something like Twitterific, your use and approach of the information delivered through it is changed. For me, Twitter is an application that lives on my desktop, and dutifully notifies me of interesting tweet every 5 minutes, and to whom I can quickly and easily tweet away with and easily track and form conversations through Twitter's direct messaging option. To someone else, and in fact, very many of the first users of Twitter, it is a website and an SMS updating service. Part of the reason for the character limit system-wide is the character limits placed on the US SMS system. One of the primary interfaces for Twitter when it first launched was the SMS (AKA: TXT or texting) screen on a cell phone and the other was the web site itself. Tweets would be sent to your phone from those you followed, and visa versa. This, so far, is the thinest of the MicroBlogging layers.

All these services exist to fill a need that was not met with the tools that existed prior to them. They are all empowered with RSS, and are all offered (for the most part), free of charge. They are quickly changing the models of communication that we are studying right now in class, and I am extremely excited to be alive right now to witness what is happening. I could gush for hours on end, but the point is simply this. Go out and try them out. Find the ones that work best for you. I abandoned LiveJournal a long time ago, but I am active on my blog once again and I am now an avid Twitter'er through Twitterific. Try them out and get back to me with your findings.


© Joseph Agreda 2008-2015