Mozilla & Tulsa Web Devs

tl;dr - Mozilla sponsored Tulsa Web Devs for all of 2012. This year Tulsa Web Devs:

  • Grew to 215 members
  • Facilitated 3 spin-off groups
  • Had 11 monthly meetings
  • Had 50 weekly coworking days
  • Had 4 hack days
  • Ran 2 web tracks at local conferences
  • Hosted 2 hackathons
  • Participated in 1 Startup Weekend
  • Helped draft 1 City Council Resolution
  • Worked on 32 open-source web projects

I'd also like to see what other Mozilla remotees are doing in their local web communities ... ?


We've added a bunch of great new members this year. I won't name any specific names for fear of forgetting someone, but our members have started spin-off groups like Red Dirt Web Designers, Red Dirt Graphic Designers, and Tulsa DrupalDevs. We also have a number of WordPress designers and dev's - though they haven't made their own sub-group yet. But our members have presented at OKC WordPress meetup and OKC.js May and June meetings.


Our average meeting attendance jumped when we moved from Fab Lab Tulsa to i2E location downtown. We went from ~12 in January to ~30 in November.

By far my favorite meeting was our August meeting where we asked anyone and everyone to simply answer the question "What have you been working on?" in 5 minutes or less where the lightning talks ranged from Couch to django to WordPress to Node.js. I hope to do more meetings like this; even if we pick a single topic, I'd love to have multiple presenters for it.


This year we finally - consistently - hosted (at and with Fab Lab Tulsa) coworking days (almost) every Friday. Attendance is anywhere from 1-2 to 10-12, with notable spikes anytime to dev's from consumeraffairs.com make the field trip. ;)

Many of our open-source project ideas come up during coworking days, and we give each other all kinds of technical advice - some of us have saved dozens of hours of work by simply asking a tech question around the tables.

Hack Days

Our hack days typically involved or included working on our open-source projects to prepare for other events. We started the year strong with Hack Days - doing one every-other-month to set up for our Spring Hackathon - but then we ran out of steam. Probably due to ...

~Web Tracks

This year we organized content for 2 "(sorta) web tracks" at established local technology events - a Gov2.0 track at Tulsa School of Dev, and an HTML5 track at Tulsa Tech Fest.

Our Gov2.0 track was pretty much a flop - it's not our area of expertise, the overall event had poor promotion, and the event logistics were terrible.

The HTML5 track at Tulsa Tech Fest was really good. I got Yury to come over from OKC to speak, Patrick to give a fresh edition of his CSS talk from the previous year, and even got Olivier Bloch to speak about HTML5 for mobile cross-platform app development.

Both of our tracks lead into ...


Our Spring Hackathon focused on Gov2.0 and "open data" projects. In 2011 we - especially John Whitlock - made a couple of very valuable and noticeable "open data" projects: TRIF and the Tulsa Transit GTFS project. Motivated by their success, we tried to do more of the same type of projects. We also increased the duration from 24 to 48 hours. We made some cool stuff, but, IMO, the format was too long and the domain was too narrow.

Our 2nd annual Fall Hackathon snapped back to 24 hours and focused only on "apps" - any app would do. Mobile web, HTML5, iOS, Android, Windows Phone, whatever. We did *some* promotion but not so much to be stressful, and we still had a good turnout and made some good projects and progress. I think it was just about the Right Size and Scope™ to be a sustainable yearly event.

Startup Weekend

A bunch of Tulsa Web Devs participated in this year's Tulsa Startup Weekend, creating projects like TFDD.co, Wallcade, and Picirus (this year's winner!). I also started a GeoNotes app aimed at Firefox OS, but our team was a bunch of backend dev's trying to learn HTML, CSS, and JavaScript so I wasn't confident enough to even show it at the closing ceremony.

City Council Resolution

Our Gov2.0 work attracted lots of attention from local civic interest groups, including Transit Matters, Tulsa Now, Tulsa Young Professionals, and eventually the Tulsa City Council itself. So, one of our city councilors contacted me about how to encourage and support the kind of projects and work we're doing. I suggested we should pass a City of Tulsa Open Source Resolution like some I had heard about from Portland, San Francisco, and Vancouver. It's still in draft stage but we hope to get it on a city council meeting agenda sometime next year.


We made too many projects to list them all, so just check out our Tulsa Web Devs GitHub org page or our Projects page. Our projects have spanned from local consumer interest to irc bots to wordpress plugins to open data.


What does all this have to do with Mozilla? In running the group, I've tried hard to NOT make it all about Mozilla, but Tulsa Web Devs now boasts 1 Mozilla Contributor & 1 Mozilla Rep, 2 Open Web Apps, and dozens of engaged Firefox users. Now many members have asked me to bring MORE Mozilla activity into the group - to host a Mozilla hack day, bring speakers in from Mozilla, and help people contribute to Mozilla's websites. I'm looking forward to more collaboration between Mozilla & Tulsa Web Devs in 2013!

I'd also like to see what other Mozilla remotees are doing in their local web communities. Got a good story to share?

mac raspberry pi dd permission denied

Raspberry Pi Grayscale Logotl;dr - If you get "permission denied" errors while trying to dd a raspberry pi disk image on your macbook pro, try blowing out your sd card slot to unset its "disk lock" switch. Seriously.

I love Mac's for the almost-linux environment coupled with a nice, rich, high-performance GUI. But every once in a while we Mac users have to search a couple extra error messages when we try to do more "linuxy" stuff - e.g., preparing a raspberry pi sd card.

This morning I got my HDMI cord for my pi, so I went thru the raspberry pi quick start guide including the easy sd card setup. But, even though I unmounted the disk and ran `dd` with `sudo` I still got "Permission denied"

I googled for this blog post title and found a topic on the Raspberry Pi forums, but the answer that seemed to work for most people was down at the bottom of the thread. So I'm re-posting it here, because it's funny, and so someone else having the same problem might fix it faster.

Apparently, 15" 2010 MacBook Pro's built-in SD card reader's get stuck in the write-locked position. So bust out your old Nintendo skills and give it a blow to clear it out. If you never had an NES, your weak under-trained lungs might need you to use a compressed air can instead. Pansy.

Facebook never bet on HTML5

I'm going to jump into the mix, but my post is short and sweet. In fact, I wrote it while waiting for tests to run.

Facebook never bet on HTML5. Anyone remember the convoluted rambling of Dave Fetterman at f8 developer conference last year? I remember being both dumbfounded and confounded by it.

So, how does this work? Project FaceWeb is an extension of this progressive enhancement idea. So, instead of the phone saying I am rendering for a WebKit browser, we send an agent that says you are going to be rendering for a WebKit UI WebKit view inside the iPhone app. So, what you have to do is detect that, style a Web code to make that work, build a bridge between the things that you want to write to interact natively with the Objective-C, say in Javascript, then build HTML pages for Facebook in the iPhone. So, you build much smaller native goop instead of having to build over and over again.


HTML5 is probably the way that we should have done it.

Near as I can tell, Facebook invented their own PhoneGap (i.e., FaceWeb) and sent m.facebook.com to it, then FaceWeb changed webkit's rendering logic* to match m.facebook.com instead of changing m.facebook.com to a mobile HTML5 site? That's not HTML5 - that's just stupid.

* UPDATE: as pointed out in comments, this isn't exactly accurate. Faceweb does some funky stuff though, and their engineering manager in charge of the project couldn't even articulate what it is. So it still sounds like bad engineering unrelated to HTML5.

* UPDATE 2: You should read Matt Asay's analysis of Facebook's HTML5 fiasco. In fact, you should read everything Matt Asay writes.

phpunit travis ci undefined offset


How I learned to stop hating on PHP

PHPUnit Travis CI Undefined Offset

TL;DR - "Undefined offset" is an E_STRICT level PHP error, and travis-ci.org uses E_STRICT+ by default. Put error_reporting( E_ALL ); at the top of your phpunit test suite to find and fix all your warnings and notices to fix Travis builds.


Today Laura and I chatted briefly about djangocon presenters bashing PHP. I mentioned that the Promote MDN code is some of my favorite code - in any language. As with my Zend_Rest code, the two keys I've found to writing good PHP code are:

  1. Use a coding standard
  2. Write unit tests

Coding Standard

I use Chris Adams WordPress Coding Standards for PHP_CodeSniffer to stick to that. It was amazing how much nicer the PHP code was when I took just an hour to clean up what I inherited from SEO Smart Links. The PHP community would do well to embrace, encourage, and even enforce coding standards more - the way the Python community does with PEP8.

Unit Tests

I write unit tests for Promote MDN too. My tests/doubles.php is hacky, but it Freaking Works™; I didn't have to build out a set of fixture data or couple the test suite to a running WordPress instance. Like WordPress, I just (ab)use the global namespace to (re-)define dependency functions with doubles.

I also took the opportunity to try out Travis CI. After fixing the travis.yaml and phpunit.xml files just right I got a bunch of test errors with the message "Undefined offset: 1" which frustrated me because I didn't see them locally. While we chatted about PHP, Laura reminded me about PHP's error reporting levels, and she was spot-on. I bumped up to E_ALL locally and got the same errors as Travis.

Error Reporting Level

I spent the next 10 minutes fixing my warnings and notices and realized - I should always use a higher error level in PHP. Python will rightfully gripe at me if I try to access a dictionary element by a key that doesn't exist. But PHP can be equally strict if I set my error level to E_STRICT or higher. So, I'm adding it to my list:

  1. Use a coding standard
  2. Write unit tests
  3. Set error level to E_STRICT

I really think these 3 practices could make any PHP code into good solid code. Instead of simply bashing on PHP, from now on I'm going to simply advise PHP dev's to stick to these practices - it's good for the developers and good for the community.

Home / groovecoder by groovecoder is licensed under a Creative Commons Attribution-ShareAlike CC BY-SA
Home / groovecoder by is licensed under a Creative Commons Attribution-ShareAlike CC BY-SA