Probability Tree

The personal site of Joseph Agreda

Archived Blog

I haven't used this blog in quite some time so it seems that now is as good a time as any to put it into archive mode. Feel free to peruse the old stuff on here, most of which started life on my old WordPress site from back in the day.

If you want to keep up with my more current writing, follow me on Medium.

Or for bite sized ramblings, just follow me on Twitter or Facebook.

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.

Public Conversations on JEM

We had another journalism event last week. It was put together by Dr. Jim Stovall and the Tennessee Journalist, with a helping hand from Scripps. The Beacon naturally neglected to mention the Tennessee Journalist bit, but oh well. I liked the format of this one. Kept things pretty simple and put the focus on getting students face-to-face time with local media professionals. The feedback I got was that it was helpful to get the perspectives of practitioners in the field, and to get some advice on getting a job in this climate. My brother was in attendance and spoke to a number of very interesting students. There were a lot of other familiar faces including Bob Benz, Lauren Spuhler, Patrick Beeson, Jack Lail and Chad Parizman. I got to rotate around and chat with a few of them before they left, but most of them know me by now anyway. I've been doing this college thing for five years now and am almost done. My only gripe was that the whole event made me feel a little old. Most of the journalism students in the room were completely new to me, save for a few who have been working with TNJN this semester. I suppose my time has come, but I still never thought it would feel quite like this.

Long story short, I'm getting old, it's time for me to graduate, these kids need to learn the ropes and become better programmers as well as journalists, and Knoxville is brimming with talent.

By the way, Patrick wrote up a great bit on his blog about his conversations with students, and I agree with him on every point, I'd recommend reading it, it's quick and to the point. I even left a (hopefully) helpful comment.


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.

© Joseph Agreda 2008-2015