Info Screen

See Also: MMPIS (Part I), and MMPIS (Part III), and MMPIS (Part IV).

MMPIS is semi-related to reMMinderbot, in that it’s meant to actually provide helpful information. reMMinderbot lets us know (via email) when there is a meeting, or if we haven’t blogged in a while, or when the monthly cleanup day is coming. (It has to remind us of that twice! On Wednesday and Saturday before the actual Sunday we clean.) There’s lots of Perl and cron involved in reMMinderbot.

reMMinderbot is also supposed to send an email telling us what’s on the calendar each day. This occasionally works. I’ve been writing code to deal with calendars for way too long. It’s sort of a nightmare. The iCalendar format is best described as Wibbly Wobbly Timey Wimey.

There’s an old saying:

Some people, when confronted with a problem, think “I know, I’ll use regular expressions.”
Now they have two problems.

Parsing iCalendar files can be like that. Luckily, Perl has a module for everything! So iCal::Parser was pulled into service. Unluckily, it has bugs. iCalendar can be tricky. There are repeating events, but they can have exceptions, days they don’t actually happen. I’ve seen weird time zone issues, and differences between clients. Anyway, it’s all wibbly wobbly.

Our original Perl code grabbed the calendar file from Google, parsed the file, and then output the upcoming events to a file that is then included in the main page. As I said, though… it doesn’t always work. So I decided to scrap it.

In an ideal world, we would just clone the calendar page on the web site and display that. There’s just way too much Javascript on that page though, and it takes too long to render. I then remembered a web application I used years ago, so I turned to PHP iCalendar.

PHP iCalendar

PHP iCalendar manages to display things properly! All events revealed! Though the monthly view is not what I want. Nor is the daily or weekly view, but… At the bottom is a “This Month’s Events” section. We can use that!

List of Events

I took the files that showed the monthly view and started hacking. I stripped out the unneeded HTML, edited the CSS to get what I wanted, and it was pretty close, but… it was just displaying the current month’s event. This would mean that if there was an event on the first of the month, you’d never see it until the first of the month, which is silly. Digging through the PHP it was just a matter of changing things to look at the current month and the next month. Not 100% perfect, but an acceptable solution.

Right now it’s looking two weeks ahead, so you’ll get any event for the next 14 days. This is what you see below.

MMPIS Events

I may play around with setting the viewport to be 1920×1080 and then using overflow: hidden to better use the space on the screen, but I’ve also got the issue that I’m doing development on a 1280×720 screen, so I may need to do some CSS stuff depending on the screen size, if that’s even possible. (Also, to pick a nit, the resolution of the TV I am using today says it is displaying 1360×768.)

Anyway, the PHP iCalendar solution has been working so good I’ll probably roll it into reMMinderbot’s calendar code. It’ll take a bit of Perl-fu to do the right thing there (multiple servers are involved) but it should be a major improvement. (Hopefully.)

What’s that? You can’t wait for Part III? It’s coming…

Stay Tuned!


MMPIS (Part I)


See Also: MMPIS (Part II), MMPIS (Part III), and MMPIS (Part IV).

I typically write about a project after it’s done, but I thought I should turn that around and start writing about a project much closer to the start. So here’s Part 1 of the story of the MMPIS, the project more formally known as the Milwaukee Makerspace Pi-powered Information System, which is a kiosk at the makerspace which will provide members (and guests) with useful (and silly) information.

First, the name… We have a history of naming things with acronyms and/or using an many “M”s as possible, such as: HMMMMMM, M6 (Milwaukee Makerspace Morgifying Marble Manipulation Machine), M4 (Milwaukee Makerspace Maker Mobile), reMMinderbot, M2C2 (Milwaukee Makerspace Can Crusher), MMLC (Milwaukee Makerspace Lighting Controller), and of course, BADASS (Beer Automated Dispensing And Security System). I choose MMPIS because it’s fun to say. I nearly went with MMKIS (Milwaukee Makerspace Kiosk Information System) but unless I’m outvoted, I’ll probably stick with MMPIS.

I’ve long had an interest in digital signage and kiosks, so after my recent Sir Like-A-Lot project, I felt like pursuing a kiosk for the Makerspace. We had a Raspberry Pi that had been floating around waiting for a project, and there’s a huge TV that jason g. brought in that we used only occasionally. Those two pieces and a few other things were all it took. Well, that and writing some code.

The heavy lifting is all provided by Screenly, and actually, it’s the Open Source Edition of Screenly. (Also on GitHub.) Screenly is a pretty nice open source kiosk application. I’ve discovered a few bugs, and have some feature requests, but it definitely works. I’ve been meaning to check out Concert and Xibo as well, but I’ve not dug into those yet.

The first group of screens is pretty simple, here’s a few grabs.

Info Screen

Here’s the main screen (for now) which tells you where you are (duh!) and shows the date and time. It also tells you where to park, has a quote from the wiki, and shows the upcoming events. Well, some of them. We’ll get into that in Part II.)


We’re also showing our Parking App to let members know which side of the street to park on. (This, as every other screen, may change in the future.)


We’ve also got our How Many Members Does Milwaukee Makerspace Have? page. The HMMDMMH page uses our member management software to let us boast about this impressive number.

What's Cookin'?

Prepare Thyself for Making

The last two are just graphics that live on the Pi that runs Screenly. All the others are web pages out there on the big old Internet. Oh, I should note that the pages need to be fairly simple. Large, complex pages utilizing Javascript or other heavy lifting don’t do very well, due to the lightweight nature of the Raspberry Pi and the browser Screenly uses.

OK, that’s our intro to the MMPIS. In the next installment we’ll get into the events that the MMPIS shows, or should show.

Stay Tuned!


BarCampMadison3 Schedule

This is/was the session schedule for BarCampMadison3, which took place on August 28, 2010. Feel free to ignore it. I’ve put it here for my own reference, as this is information I will need…

Start End Session Title Room
10:30am 11:30am Teaching Machines to Learn by Studying Nature 9-4
10:30am 11:30am LinkedIn Basics 9-5
10:30am 11:30am Empty Houses & Homeless People 9-2
10:30am 11:30am Ruby on Rails Build and Deploy a BarCampMadison App to Production 9-1
10:30am 11:30am Mathematica Training 9-3
10:30am 11:30am Drupal Theming 101 3-1
10:30am 11:30am Virtual Goods & Currencies 3-2
11:30am 12:15pm Git & Git Hub change open source 9-2
11:30am 12:15pm Linked In: Integrate with Multimedia 9-5
11:30am 12:15pm Bootstrap Your Company 3-2
11:30am 12:15pm Kids Camp Discussion [audio] 3-1
1:30pm 2:15pm The HackerSpace Movement [audio] 9-4
1:30pm 2:15pm Photoshop Touchups 101 3-1
1:30pm 2:15pm Build a Search Engine with Apache Solr & Lucene 9-5
1:30pm 2:15pm Freecycle 9-2
1:30pm 2:15pm Free Mathematical and Statistic Resources on the Web 9-1
1:30pm 2:15pm Personal Branding 9-3
1:30pm 2:15pm Linux on Low Powered Computers 3-2
2:30pm 3:15pm RFID Green Shed 3-2
2:30pm 3:15pm Intro to Hardware Hacking and Arduino 9-4
2:30pm 3:15pm SAAS Web app: Interface/signup/conversion discussion 9-5
2:30pm 3:15pm Mining on the Moon 3-1
2:30pm 3:15pm My Resume Sucks: Do I still need a paper one? [video] 9-3
3:30pm 4:15pm Net Neutrality 9-3
3:30pm 4:30pm Intro to Expression Engine 9-5
3:30pm 4:30pm Geeks & Sex 3-2
3:30pm 4:30pm How I learned to stop worrying and love the process 9-2
3:30pm 4:30pm Intro to Hardware Hacking and Arduino 9-4
3:30pm 4:30pm Our Ballot Box Startup Demo 3-1
3:30pm 4:30pm 5 ways to blog w/ Posterous 9-1
4:30pm 5:15pm Future of Web608 [audio] 9-1
4:30pm 5:30pm Open Share Tools and Techniques to Manage Web Devs 3-1
4:30pm 5:30pm Building Strong Communities for Hacker/Maker Spaces [video] 9-4
4:30pm 5:30pm Death of ads 3-2
4:30pm 5:30pm DIY Liqueurs 9-5
5:30pm 6:15pm Drupal Q&A / Drupal Toolshare 9-3
5:30pm 6:15pm How To: Make Dinner for your date 9-4
5:30pm 6:15pm Crowdsource Local Tech News – Tech in Madison 9-5
5:30pm 6:15pm Intro to Inkscape 3-1
5:30pm 6:30pm Accessibility for the Web 3-2
5:30pm 6:30pm This App can Text – Building a Twilio app in half an hour 9-2

Calendaring with CalDAV & DAViCal

DAViCal Managing my calendar is a problem I’ve been trying to solve for years. And no, I’m not willing to farm it out to a third party provider. If I was, this problem would have been solved long ago.

(For some background, see Calendar Woes, Calendar Woes (Part 2), Calendaring: Still not there…, and Events To Go. Or you could skip all that and just read this post.)

Just a bit of background, I’ve been hosting my own calendar on my home server for over 4 years, and it’s mostly worked. I used Lightning to make edits from any computer, since iCal didn’t have the ability to write to calendars stored using WebDAV. Like I said, it mostly worked. iCal (and iSync) was still needed to do the actual syncing to my phone. It was a pain, but it mostly worked.

When I moved to the iPhone, I thought my calendaring problems would be over since iTunes dealt with syncing all the calendar bits I needed. But I still had to actually sync my iPhone to my computer, using a cable, which seemed silly. I had sort of given up on having what I wanted, and thought this is how it should work… until I had a very brief discussion with Kevin where he wondered why I just didn’t use Google Calendar. After I rambled on like a madman for a few minutes, I was off to find a solution.

I found my solution… and it’s called DAViCal.

It just so happened that I got a new Ubuntu server up and running at the same time (courtesy of Kernel Design) and I figured giving DAViCal a try was worth a bit of effort, and a bit was all it took. I was quickly up and running with my own calendar, and able to add it to iCal, my iPhone, and Lightning, all with read/write privileges. The HOLY GRAIL of calendaring!

Now, DAViCal still has a way to go, but it’s GPL’d, and it works better than any other solution I tried, and it took minimal effort to get installed and configured. (I even got PostgreSQL up and running, which I never really used before.)

If you don’t like DAViCal, you could try Calendar and Contacts Server, which is also open source, and come from the Apple side of the world. It looks promising.

I know it’s dead simple to use Google Calendar or some other hosted service, but I’m one of those few people who like to have control over my data, and the backup of that data. My calendar is a personal thing, and I don’t really feel like handing that data over to someone else to take care of, and really, why should I? I know it’s the easy way out, but I’m not a fan of the easy way out, I’m a fan of freedom. The Internet is supposed to be this peer-to-peer thing with many choices, not rely on a few huge providers for everything.

Whew, what would a blog post be without a rant, eh? If you’re interested in calendaring, I recommend checking in with Calendar Swamp, which is all about the interop of the calendaring world.