Categories
Uncategorized

Sir Like-A-Lot

Sir Like-A-Lot

My latest project was sort of a failure, but I’m going to post about it anyway, because such things are important.

For a recent event I wanted to create a unique way for people to LIKE something, and get a reward for it, so I grabbed a Raspberry Pi and got to work. The idea was pretty simple, a full screen display showing the number of Facebook likes, with the URL for people to visit the page (on their mobile devices) and like it. The display would then update in “near” real-time (Well, every 10 seconds) and there would also be a surprise…

Step #1 is always configuring the Raspberry Pi. I installed Raspbian, had it set to boot to the desktop, and installed the packages I needed, mainly Apache and Chromium, since I’d be using a local web server and web browser for the display.

Getting the Raspberry Pi to work as a kiosk display was next. I didn’t want any menus or OS parts showing, so I used Chromium running in kiosk mode. My /etc/xdg/lxsession/LXDE/autostart file looked like this:

# config to launch Chromium in kiosk mode and load our application
@xset s off
@xset -dpms
@xset s noblank
@chromium --kiosk --incognito http://127.0.0.1/likealot/

We got rid of the part that lets a screensaver run, and added in the bits to fire up Chromium in full-screen kiosk mode. (Oh, one note about Kiosk mode, it does not hide the mouse pointer, but we’ll deal with that later.)

LIKES

The results on the screen looked like this. Full screen, no browser or OS bits showing. I like this solution as it can be used for pretty much anything you can code up as a web page.

The display is set to refresh every 10 seconds, so it’s pretty up-to-date, and you’re really only limited by what you can display in a browser (Chromium) running on Linux (on a Raspberry Pi, in this case.)

As for the code, it’s less than 50 lines of Perl running as a CGI, and about a dozen lines of HTML in an HTML::Template file. There’s also a little CSS and an image.

Speaking of the CSS, it was the solution to hiding the mouse pointer for Chromium running in kiosk mode. I just added this bit:

/*
 * using CSS to hide the pointer
 */
* { cursor: none !important }

For an informational kiosk you just want people to look at and not have to interact with using a mouse or keyboard, this solution works well.

JSON

You might be saying “Hey! How do you get the number of likes!?” Well, you just ask JSON, or http://graph.facebook.com/?ids=z2marketing to be more precise. Facebook Graph API data holds the key, you just need the value.

Oh, there was one more really fun bit! When someone liked the page and the page refreshed and the number increased, you’d hear applause!

The original idea was to just have the CGI do a system call to play the file using aplay. That did not work. I also tried mpg321 and that didn’t work. In the end I went the other way around and added… another Perl script! There’s a cron job that runs on startup, which launches a Perl script, which loops forever and looks at the counter file that the CGI uses. Every time the counter file changes (due to the CGI updating the number) the Perl script uses aplay to play the applause file.

The end result is pretty good. A person sees the display, goes to Facebook, likes the page, and within 10 seconds the display updates and you hear some applause!

I planned on making a sign or adding some text to entice people take action and get a “reward”. And of course the URL isn’t as helpful on a mobile device where you probably use an app instead of a browser, but this is all a good start.

Now, I mentioned a failure, so I should explain that part. For anything like this, where it needs to run for hours reliably and not just be a quick technology demo, you need some burn-in time. I had this running for a week with no issue. The first issue that came up was, what to do if you lose the Internet connection. (Hey, we use Time Warner, it happens!) You really don’t want to see a default Apache 500 error page, so the error page looked just like the main page, but with a message that said ‘Please stand by…”. That 500 page was set to redirect to the main page after 10 seconds, which would deal with occasional Internet or network outage situations. Since we were also using a WiFi connection with the Raspberry Pi, there’s always the chance of losing the WiFi connection. This didn’t seem to happen much, but it’s something you may need to deal with.

I also set Apache to not do any logging, as there’s really nothing valuable gained from logging after you’ve got everything running. It also helps to write less data to the SD card that holds the system because… corruption.

Oh yes, corruption! Every now and then I would reboot the system to make sure it would start up properly. It almost always did. Except when it didn’t. Once the Pi booted and there was a warning that the file system needed repair, so I repaired it, and all seemed well. I tested again for another week, and things seemed good. But then…

The day of the event, I had to move the system into place, and when I did that, and started it up, Linux would not boot. Even after 13 years I am still not enough of a Linux expert to fix every problem it throws at me, and I was stuck, and had a dozen other things to do, so it was dead.

I did the dozen other things and then ended up reinstalling Raspbian and trying to quickly reconfigure it, and get all my files in place, and got everything working except the audio… and the WiFi. There are a few tricks to getting audio working properly on the Raspberry Pi. I eventually got it working, but it was too late to deploy it. Oh well…

So next time, I will have a BACKUP SD card ready to put in place when the first one destroys itself. Or maybe I’ll just build two complete Raspberry Pi systems. Backups are good. Backups are good. Backups are good.

But don’t worry, I’ll take all the successful bits of this project and re-implement it in some other way in the future.

Categories
Uncategorized

Halloween 2013

Halloween 2013

The above photo is the best illustration of our Halloween activities… Actually, we had trick or treating the week before Halloween, and it was at night, and we finally live in a place that does it right! If we had 20 kids last year, that a stretch. This year, we probably saw between 100 and 200, and we scared the crap out of a bunch of them.

Halloween 2013

Dana did most of the planning and decorating, and I did a lot of the prep work and prop making. This is the path (to the “graveyard”) kids had to walk down. It’s not too scary in the light, but by the time it got dark, it was fairly creepy.

Halloween 2013

I hid in the tree near the front of the house (I had a shabby Frankenstein-style suit on) and I’d sort of reach out from the tree and say to kids “Master has a treat for you… in the graveyard!” and point them towards the side walkway…

Halloween 2013

There were a few tombstones there, which Madeline and I made out of pink foam, grey primer, a hand saw, and a Dremel tool. they turned out pretty well for just winging it all. (And yes, spray paint will melt the pink foam if you put on too much, but we just used that to our advantage to give them a “weathered” look.)

Halloween 2013

Dana also hung children’s dresses from the tree branches…

Halloween 2013

And she put up stick crosses too. She said both were in the Blair Witch Project, which was filmed in Maryland, of course.

Halloween 2013

And what would Halloween be without pumpkins? Also known as jack-o’-lanterns.

Halloween 2013

And this was the cauldron… full of candy! I didn’t get a picture of myself, or the windows with silhouettes of bats, but we had those too. Oh, and scary sound effects playing as well.

We got some kudos from adult visitors and a few neighbors, and we only started one pumpkin on fire. Our neighbor across the street had to top that, so he started one of his trees on fire.(!?!?)

Oh, and let me tell you, when Dana plays a witch, she does not break character. She can frighten children of all ages! The trick is to scare them psychologically. I won’t go into details, but I will say that we found candy in the yard that was no doubt dropped by some children as they ran from our house.

Mwuhahahahaha! Happy Halloween, everyone!

Categories
Uncategorized

A Nerdy Derby Thanks

The Track

Well, we somehow survived another Nerdy Derby event, and while it was a little chaotic, those involved definitely had a good time. None of this would have been possible without the help of Frankie and the DCRL at UWM. Be sure to check out Frankie’s most recent post about building the track.

Track Plans

Everyone at Milwaukee Makerspace was surprised at the size of the track. We’ve had the CAD files for more than a year now, and talked about building an “official” track, but we owe Frankie (and his students!) a big THANKS for making it happen. They put a lot of work into it, and we definitely appreciate it.

Last year we just used a plain old Pinewood Derby track, and I must say, this year was way more interesting! We had a lot of kids building cars, and besides the cars looking hilarious and awesome, we learned that cars fell off the track… a lot! (This turned out to be a good thing.)

Derby Car

Kids are pretty darn creative, and they came up with some crazy cars, and many of the cars fell off the track and hit the floor below, and parts flew off. I was joking that this taught them a valuable lesson every member of Milwaukee Makerspace already knows: When something breaks, we fix it. I don’t remember seeing any kid get upset about their car breaking into 10 pieces. They just picked up as many pieces as they could find and headed back to the build table to try again.

So here’s the deal… We’re going to have another race, maybe before the end of 2013, maybe early in 2014, but this time we’re gonna let Frankie choose the date so he will not miss it!

(If you’re interested in sponsoring the Nerdy Derby, get in touch with me. It really is a fun and educational hands-on event for kids… of all ages!)

Categories
Uncategorized

Derby Wheels

If you remember Milwaukee’s last Nerdy Derby, we tried to supply lots of pieces for people to build cars with. I ended up laser cutting a bunch of wheels, as well as 3D printing some wheels… take a look at the junk car post from last year.

Well this year I started printing wheels, and then decided that plain old boring wheels just wouldn’t do, so here I present a progression of wheels I’ve designed so far. I’ve only printed about 1/4 of them, but I’ll probably give them all a try before the big Nerdy Derby event at Milwaukee MakerFest on October 19th, 2013.

wheel001
The plain old boring wheel from last year.

wheel002
Speed holes… should use less material, but may not actually print any faster.

wheel003
Indent, for no particular reason.

wheek004
More speed holes, this time done using a proper for loop.

wheel005
Reverse spokes?

wheel006
Howdy partners! It’s a wagon wheel!

wheel007
And a steering wheel!

wheel008
And an Aperture wheel?

wheel009
Wheel wheel wheel wheel wheel…

wheel010
Tri-force wheel?

wheel011
Weird wheel?

wheel012
Starting to do some hull action for more 3D-ish wheels.

I will say this, I am no expert at designing wheels, but it’s been a lot of fun and a great design challenge, and I really do enjoy tinkering with OpenSCAD to create things.

Oh, and then I wanted to do a spiral wheel, and did some searching, and found this great wheel library, so use that if you really just want awesome wheels and don’t care as much about screwing around with code to learn things on your own. (Or, us the Highly-Configurable-Wheel library and learn from it!)

Categories
Uncategorized

BarCampMilwaukee8

BarCampMilwaukee8

Yes, we will be doing another BarCamp in Milwaukee, and yes, it will be the first weekend in October, though we’re only doing one day this time, so join us Saturday, October 5th, 2013 at Bucketworks “Summer Camp”, located at 161 W Wisconsin Ave, 2nd Floor, right above TJ Maxx in the Grand Avenue Mall.

Show up around 9am, and we will wrap it up by 9pm. In-between it will be the usual user generated conference wherein we figure everything out the day of the event. Who will be speaking? What will they speak about? We don’t know… but we will figure it all out on the 5th. Think of it as an “idea swap meet” where you share your knowledge and thoughts, and others do the same. You will leave with new things in your head, and maybe even some new friends or partners in crime.

We’re going all retro by doing as little planning as possible, but if you would be so kind as to register at barcampmilwaukee.org we would love that.

Also, bring some lunch money. There is a food court. Hey, it’s not like were asking you to bring your own chair! (Yes, we did that before.) It’s not like were asking you to bring your own utensils! (Yes, we did that too.) Oh, we may be able to provide parking for cheap. Would you pay $5 to park all day for this free event? Let us know on Atrium, or elsewhere, somehow.

It’s all so… undefined. Exciting, isn’t it!?!?