Common Good Vermont

The other day we launched the first iteration of the Common Good Vermont website. From the about page:

Vermont (pop. 621,000) is a small, tightly knit rural state proud of its independent spirit and high levels of civic engagement. Vermont’s independent sector (3000+ organizations, $4 billion annual revenue) plays a primary role in the delivery of human and cultural services and in the preservation of the state’s cherished natural resources. Most social services—food, shelter, healthcare and education—are delivered within local and regional community settings.

Often separated by geography (mountains, rivers, lakes), Vermont’s 251 towns and 14 counties are increasingly knit together by broadband “build-out”. Common Good Vermont leverages these electronic networks to bridge the barriers of Vermont’s geography and the “beaten paths” of its hyper-local networks. New human and electronic networking activities will support the delivery of information and innovation to the state’s community builders: project volunteers and professionals who, by virtue of their civic and nonprofit roles and responsibilities, are the lifeblood of the “green mountain state”. Common Good’s place-based and community virtual events are designed to improve the capacity of so many “small networks” that, improve Vermont’s unique “quality of life”.

Common Good Vermont aggregates content for (and from) Vermont independents and nonprofits by pulling in RSS and Atom feeds including blogs, news sources, social bookmarks, and event calendars. The goal is to serve as an information hub encouraging knowledge sharing and increasing cross-organization communication. Content is currently organized by a combination of taxonomy (categories defined by Common Good Vermont staff) and folksonomy (tags from the feeds themselves). Our goal is to eventually remove the taxonomy layer and have all content organized completely by broad and, to a lesser extent, narrow folksonomy. However, the taxonomy layer is there for now to allow a certain amount of curation while we seek out, connect, and aggregate additional sources of information.

Common Good Vermont is built using Zend Framework and hosted on Rackspace Cloud Sites. Components from Zend Framework used include its MVC system, Zend_Application, Zend_Feed_Reader, Zend_Tag_Cloud, Zend_Search_Lucene, Zend_Paginator, Zend_Db, Zend_Date, Zend_Auth, Zend_Acl, and Zend_Form. Stay tuned for future iterations to the website!

Moving On

Today is my last day at Vermont Oxford Network and I will now be working at Found Line full time. This was not a decision I took lightly. Vermont Oxford Network is a great place to work and they’ve got an excellent team. For the last four and half years I’ve been developing software that improves health care for newborn infants. I feel like I’ve made a contribution beyond just the work. However, it’s time to move on to something different.

Jason and I started Found Line almost five years ago and I’m looking forward to helping him and Liz continue to grow the business. We’ve got some really great clients and I’m very happy to have more time to focus on their projects. I’m also excited about the opportunity to work with free/open source software and open standards full time. So, time to go catch up on some work!

RedEye Universal Remote Control

Today one of our clients, ThinkFlood, launched their RedEye Universal Remote Control for the iPhone and iPod touch. The device and application combination allows you to “use your iPhone or iPod touch to control your TV, stereo, cable box, DVD player, and many other devices that receive standard (infrared) signals.” The product launch got some great press coverage including from CrunchGear, Gizmodo, Macworld, iPodNN, Engadget, TUAW, and Wired’s Gadget Lab. Our work with ThinkFlood has included developing their brand identity, packaging, and website.

The latest iteration of the website includes eCommerce functionality allowing ThinkFlood to sell their RedEye device directly to consumers. The eCommerce section includes a shopping cart and an easy-to-use two page checkout process. While the checkout process is simple for end users, there’s quite a lot happening behind the scenes with the integration of multiple APIs. The website is built using Zend Framework and thanks to Rackspace Cloud Sites everything has remained running smoothly even with all of the press coverage and associated traffic.

Bug Hunting

If you are a PHP developer in the Burlington, Vermont area then you should come to tomorrow (11/19) evening’s PHP Users Group meeting at the newly opened Office Squared coworking space in downtown Burlington. This month we will be learning how to find and fix bugs in free and open source projects. From the meeting description:

Each third Thursday and Friday of the month, Zend Framework has Bug Hunt Days in which the community helps triage issues and resolve them. These efforts include everything from fixing typos in documentation to creating reproduce cases and capturing them in unit tests to actual creation of patches resolving reported bugs.

Since this month’s meeting falls on the third Thursday, Matthew Weier O’Phinney, Project Lead for Zend Framework, thought we could join in on this effort or help contribute to other projects. He will be providing a short presentation on effective bug reporting and triage, after which we will jump into some actual bug hunting on projects you, the attendees, are interested in.

So come with your laptops ready, and let’s fix some bugs!

PHP developers of all skill levels are welcome. There are many types of contributions needed to keep free and open source projects moving forward. You will likely have something you can contribute — and you’ll learn a lot doing it!

Rackspace Cloud Sites

We’ve been a Rackspace Cloud Sites (formerly Mosso) customer for about three years. In fact, I signed up as a beta tester when it was originally called “the system beats the machine.” I doubt many people that work at Rackspace even know that it once had that rather odd name. Honestly, it was very rocky at the beginning (even after it was officially out of beta) but today it’s a very solid platform. I’ve been a fan of Rackspace for years and would recommend them to anyone who needs dedicated and managed servers, virtual servers, storage delivery, our cloud hosting.

As much as I like Rackspace, the point of this blog post isn’t to praise them. They’ve been making a big marketing push on their cloud offerings lately but I get the impression that Cloud Sites (the service we use) is the, “oh, yeah, we offer that too” service. They seem to be unaware of the potential of one of their own service offerings and push people who need a “serious” solution to Cloud Servers. Cloud Sites is an excellent platform as a service for people running PHP or .NET web applications who have better things to do with their time than manage the hardware or software layers below their PHP or .NET applications. Sure, Cloud Servers takes away the hardware layer management but you still have to manage the software layer (operating system, PHP or .NET, MySQL, etc.) yourself and deploy individual virtual servers if you need more capacity.

Part of this impression comes from Rackspace’s recent marketing efforts around their cloud offerings. Some of it also comes from the technology behind Cloud Sites. For example, one of the big pain points (for me) with Cloud Sites is lack of support for features that would make application deployments easier. I understand why ssh isn’t supported since there is no single machine to remote into. They do support sshfs which is useful and solves part of that problem. However, support for public key authentication and symlinks (symlinks work but aren’t officially supported) would go a long way towards making application deployments less painful. It’s my impression that features like these aren’t included in Cloud Sites because Rackspace thinks that people who want them should use Cloud Servers instead. If that is what they think, then they’re missing the point of how dead simple and awesome an application platform Cloud Sites could be.

Beginner PHP Code Examples

At last month’s Burlington, VT PHP Users Group meeting I presented a session on beginner PHP. The code examples can be downloaded (or forked) from GitHub. The talk was geared towards complete beginners and covered the basic structure of a PHP script, variables, comments, data types, arrays (enumerative, associative and multi-dimensional), operators, conditionals, iterative constructs, functions, scope, web forms and database access. I’ve licensed the code examples under the New BSD license in case anyone wants to use and/or modify them for their own beginner PHP talk.

The PHP Community

Last week I was at ZendCon, the largest yearly event of the PHP community. One thing that I’ve been thinking about lately, and something that many other people have talked about, is how unique the PHP community is. People are generally friendly and welcoming. Rarely do you run into someone who thinks he or she is somehow better than anyone else. Sure, you’ll get the occasional RTFM on a mailing list but ask anyone who’s interacted with the PHP community and they’ll probably have something nice to say.

I’m relatively new to the PHP community myself. Sure, I’ve been a PHP developer for about eight years but I hadn’t really been involved in the community until I started our local PHP users group two years ago. There I met many talented local PHP developers including Matthew Weier O’Phinney, now project lead for Zend Framework. I had actually started using Zend Framework a little while before I met Matthew not realizing that one of the developers lived here in Vermont. I then went to ZendCon ’08 which was my introduction to the international PHP community.

I think one of the things that makes the PHP community so strong is that we’ve had to build the community ourselves (my part in building the PHP community has been relatively tiny). Having had some involvement in other technology communities, I’ve seen the kind of support that companies like Microsoft can provide to strengthen their respective communities. During the “Meet the Zend Team” session at this year’s ZendCon, Keith Casey asked what Zend was going to do to further support user groups. I was very happy to hear this question asked.

I’d like to see Zend do more to support user groups — although I don’t have any room to talk with Matthew being a regular attendee and presenter at our local user group. In fact, as a response to Keith’s question Matthew reiterated his offer to present at other user groups if he was in the area (which, frankly, was a much better answer than the rest of the Zend team gave). Chris Cornutt published a blog post today asking what role should companies take in the developer community ecosystem. I don’t think it’s any one company or organization’s job to support the PHP community. Help is most certainly welcome but I think our strength is in doing it ourselves.

Beginner PHP

The Burlington, VT PHP Users group has been going strong for almost two years now. We’ve had lots of great presentations and some really experienced PHP developers at the meetings. However, I’ve been concerned that we might scare away PHP beginners with many of the meetings being on advanced topics. So, our next meeting topic will be Beginner PHP:

Have you recently started using PHP? Don’t use PHP but want to learn more about it? The topic of this month’s Burlington, VT PHP Users Group meeting will be, “Beginner PHP.” Learn the basics and some tips and tricks from experienced PHP developers. Are you an experienced PHP developer? Then come to the meeting and help out some beginners! We were all beginners at some point.

Refreshments will be provided, and you’ll have the chance to network and connect with fellow PHP developers. Meetings are open to the public via RSVP.

ZendCon Tips

Last year was my first ZendCon experience and I’m happy to say that I’ll be going again this year. Here are some tips based on my experience at last year’s conference. These tips are meant for newcomers, but may be useful to alumni as well.

Participate in the backchannel. Last year’s conference attendees generated over 1,500 tweets using the #zendcon hashtag and reached the top 5 trending topics on Twitter three days in a row. Over 2,200 photos were posted to Flickr using the zendcon08 tag as people traveled to, attended, and departed from the conference. There were also many blog posts and the #zendcon IRC channel on freenode was quite active. You can participate by using the Twitterslurp of ZendCon 2009 or using tagnabit.net/zendcon (I’m the co-creator of tagnabit).

Attend at least one ZendCon UnCon session. The unconference is, “a community-driven event focused on interesting topics of the moment, and engages everyone at whatever level they can.” No paid speakers, no ridged structure, just sessions of interest to the community by community members. Keith Casey did an awesome job organizing last year’s unconference and I suspect this year’s unconference will be just as interesting!

Attend a few sessions outside of your normal topics of interest. There were a few sessions I didn’t go to last year that, retrospectively, I wish I had attended. One that comes to mind was Ben Ramsey’s Distribution and Publication With Atom Web Services talk. At the time I didn’t know a lot about the Atom Publishing Protocol but now it’s a topic that I’m very interested in. You never know what you’ll learn if you introduce yourself to some topics you’re not currently familiar with.

Spend some time in the “Hallway Track.” ZendCon isn’t just about attending sessions by some of the most respected people in the PHP community, it’s also about meeting many of these same people and others from the PHP community. The PHP community tends to be very friendly, so don’t be shy! In fact, you will probably have already “met” some of these people in the backchannel. If you see someone who you’ve talked to on Twitter or in IRC, don’t be afraid to say, “Hey, I know you from Twitter/IRC!”

While I was writing this blog post, Keith Casey published a great post with some dos and dont’s for your first conference. Definitely check it out before packing for ZendCon!

Project Retrospective

When Peak Organic Brewing Company started in 2005 they asked us create their website (yes, it’s a table-based layout — this was 2005, get over it). When it launched the website included (and still includes as of this writing) the ability for you to “share your peak experience” with other users of the website by uploading a photo and a brief description of your experience. Other users could then view and rate these “peak experiences” and each newsletter sent would include a recent top rated “peak experience.” User submissions were even selected occasionally for use on the product’s packaging.

With around 500 submissions and 15,000 ratings this “share your peak experience” aspect of their website allowed Peak Organic to learn about the people who drank their beer. Even better, it allowed their customers to learn a little bit about each other. It also gave people an opportunity to contribute, quite literally, to the Peak Organic brand with the chance of having their photographs and experiences incorporated into the product’s packaging and displayed on store shelves throughout the country. I liked to call this “user-generated brand,” a form of user-generated content. All brands are influenced by their users but this was user-driven brand evolution made tangible. This content was also a factor in helping them reach the number one position on Google for the search term “organic beer” — sorry Vermont’s own Wolaver’s!

In addition to Peak Organic’s website, we also created their brand identity, developed materials for their event marketing, designed their packaging, made point of sale materials, and created sell sheets. We worked with Peak Organic for several years but we no longer work with them today. I’d like to explore some things we’d do differently today knowing what we know now four years later and with the tools available today. I wouldn’t suggest anyone simply try the same things we did with Peak Organic. This worked because it fit in with their brand. However, there are some things you may be able to learn from our experience (no pun intended).

First, I would “unlock” the user generated content from the website. This could be done simply through a feed of recent “peak experiences” with links back to individual experiences. This would allow people to easily access this content from outside the website. If they’re engaging with the brand, why does it matter if it they’re on the brand’s website or not?

An alternative approach would be to have users submit their “peak experiences” to Flickr and aggregate these photographs with a tag and possibly a group (Flickr was still in beta when we first launched the Peak Organic website). The website would then consume these aggregated photos like anyone else would and could even add a metadata layer on top for implementing the rating system. This would potentially give the community more control of this content and give Peak Organic the possibility of tapping into existing communities on Flickr.

When we first launched the Peak Organic website online photo sharing was still relatively new. Since then sites like Flickr have grown exponentially and many people are at least familiar with sites like Flickr, if not sharing photos online themselves. Today, microblogging (e.g. Twitter) is relatively new but growing very quickly. This leads to the second thing I’d do differently today — experiment with tagging beyond Flickr. I’d try tweeting from various events using an event hashtag and/or a brand-specific hashtag. Relatively speaking, not many people are on Twitter yet. However, the momentum is there and mixed in with the all those tweets must be a few “peak experiences” ready to be shared. Coincidentally, the maximum length for a “peak experience” description was 150 characters, 10 more than Twitter’s 140 character limit.