Using Amazon Kindle Fire HD’s as Registration Terminals

Even though I’m not working on CONGO as much anymore, I’m still helping out with registration at a couple events, and I’m always looking for better tools and gear to use. I originally designed registration to use cheap, network bootable PC’s, but that was so 15 years ago. The new hotness are small, inexpensive tablets. So could you put together a registration environment using some cheap tablets? Sure.

I’m helping an event that’s using EventBrite for registration services. I’d helped out at a different event about a year ago, and was impressed with the tools Eventbrite offered. The best part was the Eventbrite Organizer, a mobile app for IOS and Android that basically gave you a live dashboard, but also allowed super-fast checkins using a QR code scan. Think of scanning a boarding pass when boarding an airplane. The process is very similar.

The only drawback was, I needed a series of tablets that were roughly the same (bringing batches of workstations that are all different is a sure way to headaches). I didn’t think buying a stack of iPads was going to make sense, and el cheapo tablets from ebay and amazon are sketchy.

3 Kindle Fires being configured as registration terminals
I saw a deal come across Woot for Amazon Fire HD 7″ Tablets for… $33. Each. After digging around on the net, it looked like it was possible to load non-amazon software on these, it just took a little bit of jiggling. I’ve rooted Android tablets before, but it’s not a pleasant experience. I was seeing documentation that allowed for the Play store to be activated without a lot of yak shaving, so I decided to go all in.

I ordered 3 of the tablets, and they arrived a few days later.

First impressions – these are really nice. The design and polish is excellent, they fit well in the hand, and have exceptional screens. They have excellent battery life, and front and rear facing cameras. For $33, there’s not much to go wrong with here.

Here’s the steps I went through to get them up to ‘useable’ status.

  • First, charge them up, natch. They have great batteries, and the entire upgrade process and installation can happen on battery, but really, just get ’em charged.
  • Next, power up and log into your Amazon account. All the Fires have to be tied to an amazon login. Using the same one on each is fine (Amazon supports many Kindles per account).
  • Continuously go into the System settings (swipe down from the top) and select Device Information -> System Update. There’s a good 6 full OS updates that have to happen to bring your device up to FireOS 5.3.x or later. This can take upwards of an hour and a lot of reboots, but at the end, you’ll have a fully upgraded device.
  • Next, we’re going need to install APK’s that are not ‘blessed’, so you have to tell the Fire to accept them. Go into settings -> Security settings and check the switch that says “Allow third party apps”
  • Download and install a file manager. I used ES-File Explorer, which is very popular, but I’ve seen others say “don’t use this it doesn’t work”. I suspect the ‘not working’ has since been fixed. It’s worked fine on 3 devices so far.
  • Next, pull down the APK’s via the Fire’s Silk Browser. Go to this thread on the XDA Developers forum and click on each of the APK links, and download the files, in order, from top to bottom.
  • Once they’re downloaded, start up the ES File Explorer, and navigate to the Downloads folder. You’ll see 4 APK’s there. Click on the them from RIGHT TO LEFT (which will install the ‘oldest’ one first, and the Play store last.
  • After each of the APK’s is installed, launch the Play store, log in with your Google account, and you are all set.

Now that the Fire can install third party apps via the Play store, all we needed to do is install Eventbrite Manager, and log into it with an access-limited login we created just for this event (we’re going to allow general joe schmoes to check people in, and having access to refunds, people’s personal infromation, etc – didn’t seem like a good idea. So a generic Eventbrite login that ONLY allows for checkins was created, and that’s what we logged the tablets into.

I also picked up a handful of desk mounts with really strong gooseneck stalks. Because we’re going to be scanning receipts via the rear camera, the tablet needs to be held off the desk easily.

And we’re done! The Eventbrite Manager app syncs the attendee list whenever it’s connected to the internet. So we can go ahead and check in people super-fast (with a very satisfying BADEEP whenever a successful scan happens), and not have to rely on hotel internet connectivity (which can be notoriously sketchy). At the end of the day, we have a full record of everyone who has checked in and when.

How To Determine the Size of an S3 Bucket

This one came up while working on my home network / photo management setup. I’ve set my Synology DS216+ NAS to use Cloud Sync to back up my files to an Amazon S3 bucket (see this post for some more information on using S3 for backups). The problem was it was taking a very long time, and I needed to figure out how much had transferred.

Unfortunately, Amazon has no simple mechanism for determining the size of an S3 bucket. I found a couple posts on StackOverflow showing how to do it, but they seemed overly complex.

While you can get a bucket size using several third party GUI tools, the command line approach is quick and easy. It does require the Amazon Command line Tools to be installed, and access keys generated, but once that’s done, you can quickly query Amazon for just about anything.

Here’s the command I used to determine the size of my bucket. This is on a mac:

$ aws s3 ls s3://BUCKETNAME --recursive | awk '{total+=$3} END{print "total =",total/1024/1024," MB"}'

This will give back something like:

total = 245032  MB

Voila! Time for that command can vary depending on the size of the bucket. For me, with around 20,000 photos stored, it takes about 20 seconds.

Sorry Jekyll, I’m done with you.

logo-2xI’ve been working with Jekyll on the US Drone Racing Association site. It seemed like a nice idea. Check all your content into Github, then, when ready to do work with it, check it out, make your edits, run a local test site (that part is really nice), and when finished, check it back in. One update on the master site, and you’re done. Woo.

Yeah, see, that’s where they getcha.

Jekyll is great for very fast setups for static sites. If you never want to really change the site, such as changing themes or regularly adding blog posts quickly and efficiently, you’re probably good.

But I found the blogging process enormously painful.

  • Check the site out of github
  • Go into the _posts directory, pick an old entry, copy it to a new filename. The new filename must be yyyy-mm-dd-uniquename.markdown. This date is important because it’s used as a sort order.
  • Edit the newly created file with whatever editor you like, but the YAML Front Matter must be correct. Using YAML for structured data is already problematic, but this is supposed to be a markdown document. But, no, it’s sort of a hybrid of YAML and Markdown and HTML.
  • If you get the YAML Front Matter right, you get to write your post. Markdown is nice, but it has it’s limitations
  • Save the file, make sure you go back to your root (god knows how many times I’ve failed at this one), and do ‘jekyll serve’. Test your site locally. Swear and curse as it doesn’t work right. Repeat previous steps until right.  (Credit here.  The live preview is really nice, and it updates automatically when a file change is noticed.  I can’t fault that.)
  • git add -r
  • git commit
  • git push origin master
  • Log into your blog host
  • cd to your working directory
  • git pull origin master
  • cd sitename
  • jekyll build –destination=/var/www/yoursitename

Now, this really isn’t that horrific. Irritating, sure, but you can automate pieces of this and add some nice wrappers around it.

I wanted to theme my site. Here’s where things go sideways.  In short, you can theme a Jekyll site.

But you can only do it once.

Why? Because you don’t apply a theme to a site. You apply a site to a theme.

Sound crazy?  Lemme splain.  To theme a site, you download the theme, build it (and in Ruby land, this can be a nightmare experience. Ruby dependencies are horrific. Don’t believe me? Check out the conversation I had with a theme developer. We couldn’t get it running at all.)  But even if you do get it running, after you build a theme, you copy your existing content into the new theme directory, and commit the whole thing up to git. That’s your new site. Want to change themes? HAHHAHAHAH. You have to do this process all over again, extricating your content from your old themed site and copying it into the new theme directory structure.

Screw that.

Sorry jekyll. I’m done with you.

CONGO is going GPL.

(This announcement is also being posted on stonekeep.com)

Over the last 12 years I’ve been working hard to develop CONGO into the best convention registration system I can manage. Since 2002, CONGO has been used for many events of all sizes, registering and printing badges for tens of thousands of attendees. There have been many successes and a few bumps, but all in all it’s been a great adventure.

Several events now rely heavily on CONGO for year-to-year attendee tracking, allowing online registration, keeping up-to-date history, managing thousands of attendees, as well as the relationship CONGO has to Zambia, the scheduling system.

Continue reading “CONGO is going GPL.”

Arduino Nano “Programmer Not Responding” on a Mac

Arduino Nano v3
Arduino Nano v3

For the Staff project, I’m going to be replacing the existing Arduino Uno R3 with a smaller, more easily embedded Arduino Nano.  The Nano is a heck of a lot smaller than the Uno (makes sense – it’s meant to be permanently installed, while the Uno is a prototyping platform).  I received my Nano a few weeks ago, but immediately ran into a frustrating problem… code would compile, begin to upload, and I’d get the error “stk500_recv(): programmer not responding”

The intarwebz are full of people reporting this problem, unfortunately most are not finding answers.

I went through the usual debugging problems – changing out the USB cable I was using, checking to make sure USB drivers were correct – I could still upload and use code on my Uno, but the Nano flat out refused to accept the new code (and I did check the very common problem of not selecting the correct board in the IDE).

Finally, came across a general discussion about bootloaders, and there was a comment that sometimes these boards do not reset properly.  After some more research, I found some folks using various ‘reset button’ hacks to sort of nudge the board into accepting code.  With a lot of trial an error, I have a procedure that seems to work pretty consistently.  There’s occasional twitches, but with persistence it always loads.

Continue reading “Arduino Nano “Programmer Not Responding” on a Mac”

Notifications on all Logins on a Linux Host

Putting this one out there because I spent some time surfing various Well Known Sites and couldn’t find a complete answer.

We had a need to log whenever users logged into a production host – just a notification send to the admins saying someone was on one of the production boxes.  The other requirement was to have it be low impact – didn’t need a ton of monitoring packages installed, etc.

The result is a pair of scripts.

The first is ‘checklogin.sh’:

 #!/bin/bash
 # Nov  6 13:35:25 inf-1 sudo: dshevett : TTY=pts/0 ; PWD=/etc/munin ; USER=root ; COMMAND=/etc/init.d/munin-node restart
 TMPFILE=checklogin-$$
 AGO=`date "+%b %e %R" -d "1 min ago"`
 grep "$AGO" /var/log/auth.log | grep 'session opened for user' | grep -v CRON > /tmp/$TMPFILE
 grep "$AGO" /var/log/auth.log | grep 'sudo:'| grep -v pam >> /tmp/$TMPFILE
 cat /tmp/$TMPFILE | /tools/sysconf/scripts/mail_if_not_empty ops-notice-internal@REDACTED.com "[inf-1:checklogin.sh]"
 rm /tmp/$TMPFILE

This simply looks for some patterns within the auth.log file. The only real trick here is making a date formatted string that is ‘one minute ago’. If this script is run once a minute via a cron job, it’ll send mail within a minute of someone logging into the host.

The other script is a simple utility tool I use for most of my cron jobs called ‘mail_if_not_empty’:

 #!/bin/bash
 TMPFILE=/tmp/joboutput.$$
 TARGET=$1
 SUBJECT=$2
 cat >  $TMPFILE
 if [ -s $TMPFILE ]
 then
   mail -s $SUBJECT $TARGET < $TMPFILE
 fi
 rm $TMPFILE

Super-duper simple, it just sends mail if there's any output.  This makes sure that mail will only be generated if anything interesting happens.

Time Lapse Video at an SF Convention using Linux and a webcam

For quite a while I’ve been interested in using commodity hardware (a webcam, a small linux machine) to take time lapse videos. It didn’t seem like that complex a problem, but there were a lot of logistical and mildly technical obstacles to overcome. After a couple tests and short videos, it was time to set things up to record a four day long video at [Arisia](http://arisia.org/), in particular, a shot of the registration area.
Here’s how I did it.

Continue reading “Time Lapse Video at an SF Convention using Linux and a webcam”

CONGO Update – The road to 2.1.

I’ve set a goal for myself. Have CONGO v 2.1 released by June 1st. It’s an auspicious goal to be sure, and recent career shifts have either made it more likely (more time to work on it) or less likely (new job) to have time to dedicate to coding.
But goshdarn it, I’m going to try.
congov2-eclipse-screenshot.pngWhile coding away last night at a particularly recalcitrant chunk of the new ‘Links’ system (I’ve been… instructed… by my pesky users, that ‘Friends’ is really too ‘social buzzy funtime networking’ for an event management system), I was curious how big CONGO had gotten. So a couple greps got me some quick stats:

Total lines of Java : 13,412
Total lines of XML : 5,492
Total lines of JSP : 5,543

This makes CONGO the largest application I’ve ever written completely on my own. Oh sure, I’ve worked on larger systems, but that was part of a team with other coders. This one (with some small help from 1-2 folks – accounting for around 2% of the code) is all mine.
I’m always looking for alpha and beta testers. Interested? Lemme know. Continuous build / QA testing is working, so there’s always new builds and bugs that need to be tracked.

CONGO Available for Download

Well, I said it and said it, and promised I’d do it, now it’s really here.
You’ve heard me chatter on about CONGO, my Event Management System for running conventions, meetings, and the like – well, now you can download and run it yourself.
Details are available on the CONGO home page. If you’re a fandom or gaming event, and you’re looking for a tried and trued registration system for your con, this is the place to go.
Enjoy!

iPhone Development Guidelines – Do’s and Don’ts

First, a disclaimer. I am not an iPhone developer. I am what used to be termed a ‘power user’ – gamer, tool user, critic, yes – but I don’t write iCode. (I do develop, just not on the iphone).
Having gotten that out of the way, I’d like to propose a list of Do’s and Don’ts that every iPhone app developer on the planet should adhere to. This is a list from a USERS perspective – things that irk me to no end.
Onward…
* DO : Obey the Mute switch! – How hard can this be? If the mute switch is on, then SHADDUP! There’s a REASON it’s called a mute switch! I don’t know how many games I’ve powered up that leave me scrambling for the volume-down buttons when the mute switch was IN THE MUTE POSITION.
* DO : Incremental saves – again, primarily on the gaming front. That little device in your hand? it’s a TELEPHONE. That means people can call you at any time, and interrupt the application. It doesn’t matter if you’ve spent 3 hours getting Sir Grinsalot to the top of Mount Bigahonkin and you’re about to kill the Great Gizbo of Durn – grandma will STILL call you at that point, interrupting the game. Save!
* DO : Provide status that you’re doing something. Okay, older platforms are slow, so sometimes it takes time for things to load. Provide some animation or indication that something is going on – a load bar would be best (gives an idea how much longer it’ll take), but even a spinner will do.
* DO NOT : assume that just because you’re on an iPhone, the easiest device on the planet to use, you don’t need to provide directions. Apps are NOT self explanatory, and a link to a web page is not enough. “This button does that, this button does that. Got it? Go forth and enjoy.”
* DO NOT : Link out to a web site without informing the user you’re about to do so! Nothing is more painful than tapping on a “view the high scores list” and have that exit the damned app to start Safari. That app may have taken you 4 minutes just to get to that screen. Now you have to do it all again.
* DO : Provide a rotation lock. Some of us like to read or do games while going to sleep, which does not necessarily mean I’ll be in an upright position. Having the app auto-rotate to what it THINKS is the right orientation is irritating when you have no option to disable this.
I’m sure this list will grow, and I’m open to suggestions as to what to add to it. These are things that have come up in my adventures.
What bits have YOU seen that developers seem to miss?

CONGO – Motivation is Good!

I’ve been pretty lax on CONGO lately. Other Life stuff as well as being worn after Arisia has put coding on the back burner.

SystemUIServer

But in the last week or two, several folks have asked for updates and new installations, and my “I should get coding again!” bits have been tingling.
This week I had a great meeting with the Arisia registration head, and she and I hammered out a schedule of updates for the next release. I have about a month to implement a bunch of new features – most of which have been burbling in my head for a while, but it’s time to get them coded and released.
There’s been some nice input from other events (some far away, some local) interested in using CONGO, and my path to general release is pretty well established. Having said that, the current code is pretty solid, with documentation, installation instructions, and support available. Want to run it? Let me know, I love testers.
Anyway – code is being checked in and features are slowly getting done. It feels good.

CONGO Coding session. Phew.

I had my first decent coding stretch on CONGO tonight in quite a while. I put in 4-5 hours to work through some issues that have come up while running the v2 code for a ‘live’ event. This is the first time the new codebase has been exposed to ‘real’ customers, and so far things are going okay.
There haven’t been any showstopper bugs yet (knock on every available source), but there have been a few rocks along the way. The fellow running the conference has been very supportive, knowing it’s new code, and I’m looking forward to a post-event debriefing. “What should be done differently?”
Overall, I’m quite proud of the v2 code. It’s still missing a lot of functionality from the first codebase, but I do enjoy having everything in Java in a sane build system and a rock solid database layer.
And now… bed.

The Portable Stack – Is there a place for the EeePC?

Recently I was successfully marketed to by Woot.com and aquired an Asus EeePC 900 Linux netbook. For those who are not familiar with these puppies, they’re hyper-small fully functional ‘laptop’ computers, scaled down to be the size of a hardcover book. The Netbook article on Wikipedia is a good summary of these devices.

The Asus EeePC 900 is an ‘older’ version (hence the reason I got it for only $149) with 512meg of RAM and a 4 gig SSD drive. It has all the basic features you’d expect for a laptop – wifi, decent screen, touchpad, USB ports, good battery life (about 3.5 hours), etc. In all respects, it should be a geeks dream. A fully functional Linux box that is only a few pounds, and can run for hours.

So why am I considering handing it off to my son?

The main problem is that in the current portable computing environment, the ‘slot’ that Netbooks like the EeePC can fill is narrowing rapidly. On the ‘full laptop’ side, there’s a trend toward longer battery life, lighter designs, and stuffing all the functionality of a full desktop machine into a portable form. Many people don’t even have desktop machines anymore, they use their laptops for all work (that’s my situation). On the other side we have the emergency of smartphones like the iPhone (which I have). The iPhone is an enormously capable device. I can read my email, chat online, browse the web, play games – all the things I’d likely do on my laptop if it were small and light – the space that the EeePC and others are shooting for.

Even in the face of all this, I really did give the EeePC a try. I carried it around for a week, trying to see where I’d use it and where I wouldn’t. I never ‘clicked’ into it in any particular fashion, due to a number of obstacles that were either filled by my iPhone or by my laptop:

  • Very small keyboard
    The EeePC has a very small and somewhat wobbly keyboard. I have quite large hands, and though I could ‘shrink’ my hands down to type away, it took some serious concentration, and really only worked when the EeePC was flat on a desk and I was sitting in a proper chair. If I were in that situation, I’d just use my laptop.

  • Wireless twitchy
    This is probably a fault of the Linux distribution the EeePC uses, but I had all sorts of problems with the machine waking up and not reassociating with any available wifi (it wouldn’t even show networks available).

  • No LEAP support
    The wireless also could not use LEAP authentication on wireless. This meant I could not use the EeePC anywhere at the office. Total loss there – I was hoping to be able to bring the machine with me to meetings so I didn’t have to undock and haul my normal laptop along.

  • Update failures from Asus
    ASUS has broken their updater. The EeePC will not software update properly from ASUS’s servers. This is a real problem. There are workarounds, naturally, but it likely means there won’t be OS updates from the manufacturer anytime soon. The answer seems to be to use Eeebuntu, a version of Ubuntu linux designed specifically for the EeePC netbooks.

  • Touchpad
    I don’t like the touchpad. I don’t know why – I just can’t get comfortable with it. The two-finger scrolling is cumbersome and prone to ‘pausing’ (this compared to the two-fingered scrolling on a macbook, which is smooth as silk).

  • Yet Another Power Supply
    I have a problem with power supplies. If I’m going to carry another laptop, I have to have another power supply with me. So now I have 2 laptops, 2 power supplies. This is not saving me anything in weight in my backpack.

Given all these issues, I find myself either picking up my iPhone to twitter or check something on wikipedia, or get out my laptop if I’m going to do any real work.

So what to do? The current plan is to reload the EeePC with Eeebuntu and evaluate that. If it’s stable, is able to browse youtube, run Python’s IDLE environment, and play nethack, then it will be a perfect upgrade for my son, as he’s outgrowing his XO laptop.