PHPCP: Programmers Helping Pediatric Cancer Patients

May 11th, 2012

Since 1997, I have volunteered with Special Days Camps. In 2003, I took on the role of maintaining the website. At the time it was MS FrontPage. I cleaned up a lot of the content and separated it from the headers/footers/nav using a lot of server-side includes, and later some custom PHP. In late 2007, I switched it to the Joomla CMS so our ‘non-tecchie’ staff could add and maintain the content on the site. We also added the Zen Cart shopping cart software as a way to take donations.

Joomla Projects:

Site migration: We’ve been at 1.5 since we started with Joomla in late 2007. Over time we have never had a substantial reason to justify migrating to a newer version. However, security updates for 1.5 will stop in September 2012. So we’re taking a hard look right now at what it will take to move our content to 2.5. We would appreciate any advice or help that folks are able to provide.

Zen Cart Issues and Projects:

Optimists walk-a-thon: The Michigan District Optimist Clubs have generously offered to team up with us to hold a walk-a-thon in early June 2012. People participate by signing up to walk, then raise pledges from people willing to sponsor them in the event.

We have added some features to our site in an effort to make it more ‘Convio’-like; for example, we added an email field to each product, which emails a participant when someone has given them a donation via the online store. (Every team or individual registrant has their own ‘sponsor me’ product.) That email tells them how to get in touch with their donor, and also gives them a total of funds raised to date.

However, we have been getting some transaction errors, and I’m not sure whether this is as a result of our recent upgrade to v1.5.0, my own hacking on the email notifications detailed above, or something different.

Bigger goal: We’d love it if purchasing one kind of product (like ‘register for this event’) could automatically create another product in a different category (like, ‘Sponsor so-and-so!), with certain default properties, but in an un-blessed state – every new registration would have to be reviewed and approved, of course.

Long-term projects:

Facebook integration: Over time, much of our Special Days ‘extended family’ has migrated from using our own website, to our Facebook page… to get information about camp, links to photo galleries and videos, and more. We are always looking for ways to more closely integrate the two sites.

Registration System: We’d like to create a registration site that parents can use to register their children for camp, and which staff members can use to apply to camp. Which framework we use isn’t as important as knowing that we can clearly codify certain business rules, have access to the data when & where we need it, and meet certain guidelines for data security. Ideally, such a system would be generic enough that it could be used for more than just this one camp, and shared with others. More on this in a separate, future post.

Site refresh: We can always use help and input on our branding, website layout, graphic design, stylesheet, moving to HTML 5… all that stuff that I’m nowhere near expert enough at to attempt on my own.

How you can help:

  • Tell someone about this project! Odds are, you might know the perfect person who could help us with one or more of the items on this list.
  • Get in touch! I am thom.brooks at gmail dot com. I am happy to answer questions about what we do, and clarify anything that wasn’t explained here.
  • Request a tarball! I’d be happy to sanitize the code and create some dummy data that you can use to get this running on your own box, then suggest changes / fixes / improvements.
  • Request a repo login! If you’re interested in making some contributions, I will set up a repository and you can start making commits.

PHPHP: Programmers Helping Puppies Helping People

May 11th, 2012

My wife and I got our Standard Poodle, Clytie, from the Poodle Rescue of Houston in May 2009. We took her to the Canine Center for Training and Behavior and she earned her AKC “Canine Good Citizen” certification. This was a prerequisite for becoming a therapy dog.

We then went through training with a group called Divine Canines. Their slogan is, “Ordinary Dogs; Extraordinary Service.” This is a group of 100+ dogs and their human companions who visit about thirty different sites around Austin, including:

  • Nursing homes
  • Austin State Hospital
  • Austin Children’s Shelter
  • Helping Hands Home
  • Ft. Hood
  • ‘Barking Book Buddies’, a program where kids improve their literacy by reading books to the dogs.

It is a lot of fun, and everybody gets a lot out of the experience. But there is one big hitch.

In order to get funding, our volunteers need to log their hours, so we can generate reports to justify where those dollars are going (to training more volunteers, etc.)

Hardly anyone is using the system right now. The current volunteer hours logging system is functional, but is not very forgiving of bad input. The user experience is somewhat lacking.

To try and correct this, I created a subdomain where I could workshop a new system that was more intuitive and easier for our volunteers to use.

It makes use of these libraries and frameworks:

  • CodeIgniter MVC framework – to make it more ‘app-like’ and help separate business / presentation logic.
  • DataMapper ORM – mapping my schema’s entities/relationships from database tables to PHP classes.
  • Tank Auth for CI – including transparently mapping less-secure password hashes to better encrypted ones, behind the scenes.
  • jquery + jquery-ui datepicker to put in a pop-up calendar for picking dates:

Other features:

  • The system already knows who their dog is (in a dropdown) so we avoid validation errors. (There is a dog named Q-Tip. Just guess how many ways there are to enter that into a database.) There is a ‘none’ selection because people sometimes volunteer to take pictures or do other tasks, but don’t bring their dog along for that event.

  • A lat/lon js library and navigator.geolocation to ask their browser where they are and sort the list of volunteer sites by their distance away from them. (So if they log their hours on their smartphone, we can make the first item in the list be their current site.)
  • Big ( – ) and ( + ) buttons to map inputs to drop-downs for mobile, so people can easily say how much time they spent volunteering, in 15 minute increments:

Stuff we need help with now:

  • Some of the lat/lon javascript is broken, doesn’t work on all browsers, or only works the first time you use it. If it works, the A-Z button doesn’t re-sort the list alphabetically.
  • The jquery-ui calendar is cool, but doesn’t quite work on mobile – need to find a workaround.
  • Reporting of hours in different ways, filtering, criteria, etc. for the people who coordinate our volunteers and apply for grant funding.
  • Methods for adding new volunteers and their dogs, editing their info, repasswording them, etc.

Bigger-picture stuff that we will also be looking for help with soon:

  • I’m not a graphic designer. Neither was the previous person. Enough said.
  • We’re hoping to get a graphics refresh as part of a branding overhaul being donated by one of our sponsors. Once that happens, we will need help ‘re-skinning’ our site with that new look and feel.
  • The site could probably also use a big HTML 5 / CSS 3 overhaul.
  • We need to get rid of Flash and find equivalent HTML 5-based animation / slide show tools.
  • Along the same lines, we need to be more friendly to people on mobile / tablets.

How you can help:

  • Tell someone about this project! Odds are, you might know the perfect person who could help us with one or more of the items on this list.
  • Get in touch! I am thom.brooks at gmail dot com. I am happy to answer questions about what we do, and clarify anything that wasn’t explained here.
  • Request a tarball! I’d be happy to sanitize the code and create some dummy data that you can use to get this running on your own box, then suggest changes / fixes / improvements.
  • Request a repo login! If you’re interested in making some contributions, I will set up a repository and you can start making commits.


April 29th, 2011

My iPhone 4 died recently. Hard. Apple replaced it with a brand new one, which was very reasonable. I hadn’t backed up in a bit over a week. Such is life. (Hopefully the iCloud will float along soon, to save me from myself.)

The restore process always leaves a bad taste in my mouth, because it never remembers where I put my apps. I have a lot of apps. They’re organized into a lot of folders. When the initial ‘restore’ process finishes, but it hasn’t done the first sync, I notice that any of Apple’s default apps (and some random others) that I’d stored in folders, will preserve those folder names. They’re in little, impossible ‘folders of one’. At least they save me from having to retype their names.

Then the sync happens, and it loads everything else back on: apps, music, etc. And all of the apps are all over the place. (Oddly, after those single-app folders, it’s all the apps starting with ‘M’ and onward. )

I try and remember exactly how I had everything, and then I laboriously futz with the UI until I drag everything back into place. If I’m on iTunes, the process is slightly easier, but still fairly tedious. I feel like there must be a better, easier way to do this, but more importantly, I don’t feel like it should ever happen. If I put it in a folder, doesn’t that get backed up in some pref somewhere that ought to persist, even across restores? Is my iTunes library or my iPhone’s backup somehow corrupt? (It happens with the iPad too, like when I switched to the iPad 2.) So I suspect it’s a bug, or at least not as well written or intuitive as it could be.

I have enough apps that they don’t all show up when they’re not all in folders. I got started on the re-filing process tonight and got a good chunk done. But after I’ve put a bunch of them into folders, and even reduced the number of pages worth of apps, I’m never quite sure what magic has to happen before more of them will re-appear. I know they’re already on there; I can left-swipe from my home screen and search for them. But I can’t find them if I go looking. (Is it my next sync? Power off and on? I have no idea.)

An earnest wish: if I see an app in my search results, I’d sure love to be able to press and hold and get some kind of contextual menu that said, “Locate this app” to whisk me to its page. Because then I could put it back where it belonged – without having to keep searching for it, or without having to connect to my MacBook Pro and find it, possibly in ‘The Grey Realms’, which is the name I’ve just coined for those screens which are Beyond Page Eleven. (I have eight full pages of those, plus a few random stragglers.)

Any other kind of search result, you tap on it and there’s some default action: play that song, open that contact, etc. Launch that app. No, no, no, just show me where it is, dangit.

And then the crowning moment: I sync again, and it erases all of my hard work, like I never did anything in the first place. Everything is out of a folder again, thoughtfully alphabetized for me.

A small puff of steam comes out of both of my ears, cartoon-style. So I sit down and I write this, hoping that somewhere, someone who can solve this problem will read these words, and go snooping, and file bugs in radar and make life a little better for everyone who has experienced these symptoms.

And then I go sort my apps. Again.

March 12th, 2011

In respose to Jacqui Cheng’s question about vets/vet techs remembering their patients:

“Do you think vets and vet techs actually remember animals they saw years ago, or is it all an act? I’m kinda leaning towards the latter.”


My sister, a vet, responds:

“Well, it depends.  For your average day practice client with a healthy pet that the vet sees once a year, no, they probably don’t remember you that well, although there are always some people with a great mind for names/faces who may.  If your pet has had any health problems that have you in more frequently or an interesting or frustrating condition, or if you have multiple pets who go to the same place or have been going there for years, while I may not remember every detail if I bump into you on the street somewhere, once I have the file in front of me and re-read it, it comes back.  Gotta love good medical records. :)

So, I don’t think it’s all an act all the time, but I mean, c’mon. Even if I don’t remember you that well, it’s just polite to pretend to, just like you would with someone you bumped into that you briefly knew a long time ago.  Just like your human physician does. :)

I mean, I’m not going to walk into a room and go “who the hell are you again?”

How to make InDesign behave like a proper Mac citizen

September 18th, 2010

Most Mac applications support certain familiar keyboard shortcuts which are universal across all apps – Command-Z for Undo, Command-P to print, and so forth.

In most text editing windows on the Mac, the default behavior for the option-left arrow and option-right arrow keys is to skip a word at a time. It makes it easy to zoom around in your text without removing your hands from the keyboard.

However, Adobe InDesign does not support this behavior by default. Instead, these keys are used to increase and decrease kerning and tracking, which moves the words slightly apart or together. While I can see the utility of having these commands so close at hand, they’re not something my brain is willing to learn right now.
Read the rest of this entry »


September 18th, 2010

No spoilers, I promise. (It’s hard!)

I went into this without having read one word about it. My wife told me, “our friends got us tickets, be at the theater at 7 pm.” All I knew was that it was a film about online relationships.

Bottom line: It’s worth seeing.

On the big screen? Not required, though seeing it with a theater full of people will make it a different experience for you.

Nutshell: It’s a documentary about a photographer in his early twenties in New York City (Nev Schulman, pronounced ‘Neev’). His brother Ariel and friend Henry, who appear in the film, are the filmmakers. Nev receives a painting in the mail, done by an eight year old girl named Abby. The painting is based on one of his photos (of two dancers), which was published in a newspaper.

Nev becomes pen pals with Abby, and she sends him more paintings based on his photos. At the same time, he’s also meeting her mom Angela, her nineteen year old sister Megan, and others in their circle of friends – largely through Facebook, emails, texts and phone calls.

Over the next nine months, the film follows Nev as he gets to know Abby, Angela, and Megan. He learns more about them, and gets into an online relationship with Megan. Nev learns that Megan is a talented singer and musician, and asks her to record covers of some songs for another film that he, Ari and Henry are working on. And that’s when things start to unravel.

Official Site: Rogue Pictures


I think that the trailer uses a somewhat scary scene and music out of context to make it seem like a murder mystery whodunit, and it’s really not that kind of film. But I was certainly on the edge of my seat in some key parts. (Read on!)

Read the rest of this entry »

I want an iTunes Pro.

September 4th, 2010

Apple makes a lot of good decisions. And for the most part, they’re made for normal users, not power users. If your mom can operate the computer and do what she needs to do without needing tech support, then Apple has succeeded.

However, for many apps, there is a counterpart ‘pro’ version of that app, which is intended for someone who has more specific expertise and wants more tools at their disposal. You might graduate up from iPhoto to Aperture, from iMovie to Final Cut Pro, and so forth.

Well, I would like a ‘Pro’ version of iTunes. Here’s my beef:
Read the rest of this entry »


January 27th, 2010

Tablet Fever

So everyone has been up in arms for the last month or three about what Apple will announce today (Wednesday, Jan. 17, 2010.) The big rumor is that it’s a tablet. At this point enough people are saying it that I feel reasonable about having hope that’s what it’ll be.

Read the rest of this entry »

Why Applecare is excellent.

January 25th, 2010

In a previous life, I thought I was lucky when I hadn’t bought AppleCare and the power supply in my iMac G5 1.8 Ghz died one day before the one-year hardware warranty expired. They sent me a new, self-service power supply and I installed it; I bought AppleCare that day even though I didn’t have to. They sold me with their excellent support and coverage.

Recently, I had an even more fortunate thing happen.
Read the rest of this entry »

AT&T: When it rains, it p- #%$^$%t4t5y%$$55 +++NO CARRIER

October 9th, 2009

Every time it rains, our AT&T home phone service and DSL get spotty. Sometimes there is no dialtone. Frequently, it will drop the DSL connection. This is very frustrating. My wife works from a home office and has to go somewhere else to work when this happens.

This is what we know:

  • Problem exists beyond our demarc (TNI), meaning it’s not the wiring in our house. You can plug a phone into their box on the outside wall of our house and hear the static or fast-busy or whatever it’s doing at the moment, provided it’s raining.
  • Lots of aerial lines in our neighborhood (as opposed to buried).
  • Technician who was already out here estimates four or five splice points between our house and the nearest cross box. In other words, those are the places where it’s likely to be having the problem.
  • To fix the problem, a technician would probably have to cut in a new pair. However, they’d also want to do this while it’s raining, to make sure they don’t pick a different, equally bad pair instead.
  • What this all means is, the problem has probably persisted because who wants to go climb four or five different poles in the rain to hunt down this issue? I know I sure wouldn’t want to.

Trying to use the AT&T automated trouble-reporting service is also very frustrating. Here are some reasons why:

  • You’ve already told the main system that answered the phone what line you’re calling with trouble on. But once you’re connected to the actual ‘home phone line repair center’ you have to do it again, because these are two different systems that aren’t smart enough to talk to one another.
  • Once you get to the part where you’re asked, “Does this affect the data portion of your line, or the voice portion?” you don’t have an option 3 for, “Both.” Even though earlier, you’re given the choice to tell them that multiple systems are affected by the problem you’re having.
  • There is an eleven hour window in which the technician might show up, and of course not until Monday (though a tech I spoke with said he’d be out working on Sunday.) This pretty much can sink one’s whole day.
  • There is no way to use the automated system to say, “We only have this problem when it’s raining.” If the lines have dried up by Monday, this will waste a technician’s visit for no good reason.
  • Speaking to a human rep is just as useless. All they can do for you is close out the ticket, or leave it in place for the time / date when you know that the problem won’t manifest itself. They have no way to escalate the case, or at least they claim not to.

I cancelled the visit scheduled for next week, and I think we should strongly consider cancelling our service. As horrible as Time Warner cable is supposed to be, I have far more faith in that technology’s ability to carry the bits and stay online than I do with DSL… even if the company itself is reputed to be just as bad, or worse.

One other option would be to consider AT&T’s ‘U-verse’ service. Our friend has it and has reported ridiculously fast bandwidth speeds. However:

  • You have to be within 2600 feet (as wired, not as the crow flies) from the nearest cross-box with a fiber termination;
  • Maximum possible distance where it could work is 3300 feet;
  • We live between 0.6 and 0.7 miles from the nearest crossbox, which is 3168 – 3696 feet… not likely to work. (The “is it available in my area?” system says no.)