Free/Open Source and Proprietary Software Symbiosis

Last week on The Browser I was talking (again) about free/open source software and open standards. Jonathan Butler (the host) asked what my thoughts were about my iPod touch which is proprietary hardware and software. Paraphrasing my answer, I said that Apple has created a killer product and a big part of this is their complete control over the platform. However, long-term innovation can only be sustained by free/open source software and open standards.

I was thinking about that question after the show when I remembered something: there’s a ton of free/open source code in the iPhone and iPod touch. These devices run a version of OS X, parts of which come from the free/open source FreeBSD operating system. Safari, the device’s web browser, uses the free/open source web browser engine WebKit. Contrary to popular belief, many free/open source software licenses allow you to make proprietary derivative works. Apple does contribute software back to the free/open source community even though they are not always legally required to.

My point is not to praise Apple’s contributions. Likely these contributions are beneficial to them. If they branch a free/open source project and their branch strays too far from the original, they will have a hard time incorporating new features from these projects. Linus Torvalds (credited with developing the Linux kernel) recently commented on Microsoft’s contribution of code to the Linux kernel:

I agree that it’s driven by selfish reasons, but that’s how all open source code gets written! We all “scratch our own itches”. It’s why I started Linux, it’s why I started git, and it’s why I am still involved. It’s the reason for everybody to end up in open source, to some degree.

Apple and other proprietary software companies (maybe even Microsoft) are starting to demonstrate an interesting symbioses with free/open source software. While I do think that free/open source software is better for “consumers” and beneficial to society in general I don’t think any of that is a necessary argument in support of free/open source software. I think that it is an approach that will ultimately create more value and be better at sustaining innovation than proprietary software. Smart software companies are starting to recognize this. Apple has reduced their upfront and ongoing research and development costs by tapping into free/open source software, even if the products they deliver to customers are proprietary. They also seem to understand the value of releasing some of their own software and modifications under free/open source licenses: they will get back more than they put in and the reward is greater than the risk.

Domain-Driven Design

I am currently reading Eric Evans’ Domain-Driven Design book. Having read most of the book I can say that his presentations on Putting the Model to Work and Strategic Design are an amazingly concise overview of the book’s content (note that InfoQ provides slides below the videos). If you’ve been interested in reading the book but just haven’t had time yet then I’d recommend watching these two presentations.

I have a lot of experience building web applications that separate business logic from presentation and have been using Zend Framework’s model–view–controller (MVC) components for over two years now. This has certainly helped make web applications I work on more maintainable. However, creating effective models (the “M” in “MVC”) has always been difficult (this has nothing to do with Zend Framework and has everything to do with the difficulty of modeling in general). The Zend Framework team has been relatively quiet on models since modeling tends to be specific to your application’s domain (although Matthew Weier O’Phinney recently gave a great webcast and presentation on modeling in Zend Framework).

The Domain-Driven Design book has helped make a lot of things “click” for me. It drives home the point that modeling is a domain-specific task and that the complexity is usually in the domain, not the technical aspects of your project. If you think the complexity is in the technology then you should question your choice of tools (in my opinion) but in this case perhaps domain-driven design isn’t right for you. The book provides many patterns that help keep the focus on the domain. Arguably the most important of these patterns is the Ubiquitous Language which is “a language structured around the domain model and used by all team members to connect all the activities of the team with the software.” Other important patterns include Entities, Value Objects, Services, Repositories and Factories.

If effective modeling has been something that you’ve struggled with then I’d urge you to check out Eric Evans’ presentations and then read his Domain-Driven Design book.

Free ZendCon Pass

The Burlington, VT PHP Users Group has won a free pass to ZendCon ’09 along with Austin PHP Meetup, the Chicago PHP User Group, PHPBenelux, and PHPWomen. Congratulations to my fellow PHP users group members! Now we need to pick a lucky member to get the free ZendCon pass. Are you a local PHP developer that meets the criteria? If so then send in your application by 8/1/2009.

New Media Office Hours (East)

If you’re a “new media” (social media, digital video/photography/editing, podcasting, etc.) enthusiast (or just curious) in Burlington, Vermont then you should check out the New Media Office Hours this evening. From the VCAM blog:

So we’d like to officially announce that the first New Media Office Hours (east-coast) gathering will be this coming Monday evening at The Sapa coffeehouse in downtown Burlington at 5:00 P.M. A small group of new-media pros and arm-chair enthusiasts will be on hand to chat with anyone who stops by about whatever is on their mind (related to new-media, that is).

I’m not sure yet if I’ll be able to make but it sounds like a fun event!

HTML 5, HTTP Methods & REST

Lots of very exciting things are happening right now for us web standards aficionados. The big news is the buzz around HTML 5 and its growing support in modern web browsers (modern meaning not Internet Explorer). The current state of web standards makes it difficult, but certainly not impossible, to use the web as a true application platform. HTML 5 promises to change this (maybe not fully until 2022 — but we’re patient). Many articles have been written about HTML 5 but there’s one tiny, but very important, feature I’d like to focus on here: support for the HTTP PUT and DELETE methods in forms. First, a little bit about REST…

I’ve talked about REST here before but REST is useful for more than just building web services. REST is an abbreviation for representational state transfer and is an architectural style for building software. The web itself is built using REST so it is a proven and scalable architecture. Unfortunately many web developers ignore REST to their detriment. Conforming to REST principles can help with search engine optimization (SEO) as well as make your web applications more usable (through predictability of actions) and scalable (the web itself has scaled to massive proportions).

Using a RESTful approach, every URL is a representation of a resource (a noun). These resources can then be retrieved and manipulated (have their state changed) using a standard set of verbs. These verbs are actually HTTP methods. There are a whole bunch of verbs/HTTP methods but only worry about four of them (at least for now): GET, POST, PUT, and DELETE. Here is an example of how some nouns and verbs can be used to together, borrowing from the Atom Publishing Protocol (APP):

HTTP method URI result
GET /people GETs a collection of people
POST /people POSTs a new person to the collection (using data in the POST request)
GET /people/bradley-holt GETs bradley-holt
PUT /people/bradley-holt PUTs an updated version of bradley-holt (using data in the PUT request)
DELETE /people/bradley-holt DELETEs bradley-holt

The problem was that up until now there was no way to specify a form method other than GET or POST. This meant that everything had to be tunneled through POST (or had to be done using JavaScript) which, while not technically incorrect, was incovenient and did not allow web developers to fully express the intent of user actions. HTML 5 specifies that forms can now have the methods of PUT and DELETE as well. This simple addition is one small way in which HTML 5 will allow the web to become more of a fully-feature application platform.

For you Zend Framework developers: I just learned today that Zend Framework 1.9 will include a new REST router which will help web developers adhere to RESTful principles. Please use it and also use the new PUT and DELETE methods in HTML 5 forms as browser support catches on.

Jelly!

Are you an entrepreneur, freelancer, or just someone looking to work out of the office for an afternoon? Then sign up for the upcoming Jelly that we’ll be hosting at our Burlington, Vermont studio! The date is Friday, July 31st from 1pm to 5pm. A Jelly is a casual coworking event. For more info on local coworking plans check out the BHive LinkedIn group.

We’ll provide the Wi-Fi and coffee (please bring a travel mug so we don’t run out of mugs), you bring your laptop (or whatever you need to work). Our studio is small so space is limited. Depending on the number of attendees it could get crowded, so please bring a friendly disposition. Be sure to sign up (it’s free!) early to reserve your spot. If there’s no remaining space by the time you read this, please contact me (you can simply leave a comment here if you prefer) or Jen Mincar and let us know that you’re interested so that we can let you know if space opens up.

Tagnabit Usage

It’s been two weeks since we launched tagnabit. I want to share some information about how people have been using tagnabit. Some of the most popular tags used so far include:

btv
BTV is the airport code for Burlington, Vermont (where we are located). This tag is pretty heavily used on Twitter to represent our city, but it seems to have other meanings on the other social media sites.
btvsmb
A local event, the Burlington Social Media Breakfast took place a few weeks ago.
acmedia09
Next month in Portland, Oregon is the Alliance for Community Media’s International Conference and Exhibition. The activity so far has all been on Twitter. If it’s anything like acmne09 then I won’t be surprised to see lots of photos, blog posts, videos, and bookmarks once the conference gets started.
tek09
php|tek 2009 was a PHP Conference that took place last month in Chicago, Illinois. While tagnabit actually launched after the conference was finished, it was an example tag that I used to explain the idea behind tagnabit to several people in the PHP community. There’s lots of great content tagged with tek09. Tagnabit is built using PHP and Zend Framework in case you’re wondering what the connection is.
cxage
Leadership in a Connected Age conference – also a local event.
champ400
The tag for the Celebrate Champlain Quadricentennial events taking place here this summer (sensing a local trend?). There will be lots of happenings so hopefully there is a good amount of participation in tagging content around the events. Vermont Public Radio is encourage people to tag content about Champlain 400 as well, so that should help.

On a more serious note, another tag worth mentioning (although I don’t think anyone’s used tagnabit for this yet) is the iranelection tag. There is a constant stream of tweets, photos, blog posts, videos, and bookmarks using this tag. Our thoughts are with the Iranian people.

Tell us how you’ve been using tagnabit. Do you plan on using it for an upcoming event? Are you mainly using it to follow tags or are you also posting content? We’ve got lots of ideas for improving tagnabit but would love to hear your thoughts! You can either comment here or use the tagnabit tag to give us feedback through Twitter, Flickr, Technorati, YouTube or Delicious.

Tagnabit Launched!

Last night we announced the launch of tagnabit, a social media aggregator. It’s “a service that aggregates tags from popular social media websites. It is useful for conferences or other events. Participants can use a shared tag across Twitter, Flickr, Technorati, YouTube and Delicious. Tagnabit then aggregates this content in one place.” The idea originally started with Town Meeting Day Vermont and then was used for the Alliance for Community Media Northeast regional conference. People found it useful, so we decided to make a “generic” version that basically has the same functionality as these sites, but for any arbitrary tag. Bill Simmon has a few ideas on how tagnabit can be used.

The functionality behind tagnabit was built using Zend Framework (MVC components, Zend_Feed, Zend_Service_Flickr, and Zend_Cache). The client side is all semantic XHTML (with a few Microformats), CSS, and a few JavaScript enhancements (using jQuery). We’ve got plans for some new features – but we’re curious to see how people use the site first. If you’ve got feedback, please send it our way via Twitter, Flickr, Technorati, YouTube or Delicious by tagging your content with tagnabit (#tagnabit on Twitter).

ACM-NE Conference

Last week the Alliance for Community Media Northeast Region (ACM-NE) had a conference here in Burlington, Vermont. Organizers of the conference encouraged participants to use a shared tag, acmne09, on sites such as Twitter, Flickr, blogs, YouTube, and Delicious. We created a website for the conference (similar to what we had done for Town Meeting Day) that aggregated content from these various social media websites. You can see the website at acmne.net/09.

I also had the pleasure of speaking on a social media panel and helping with a social media workshop. Colin Rhinesmith, who was on the panel with me and also helped with the workshop, has a good summary of the conference on his blog.

Open (local) Government

Last night I went to the Burlington, Vermont City Council meeting to listen to our newly re-elected mayor, Bob Kiss, give his State of the City speech and watch the City Council attempt to elect a new council president. I said “attempt” because, after 14 rounds of voting, they were still deadlocked 7-7 for opposing candidates. However, that’s not what I want to talk about. In Mayor Bob Kiss’ speech he made the following statement:

My administration worked closely with the Open Government Committee formed by resolution of the City Council. In response to committee recommendations, we’ve included more information about public meetings on the City web-site and the Planning Department added a new section about proposed and pending zoning amendments. During the campaign it was clear that people want to know more about the activities of each city department. Over the next year we’ll look closely at how to finance and build a more uniform, responsive and user-friendly City website that will keep you better informed about public meetings and how you can participate in the process of government.

I’m all for open government and the City of Burlington, Vermont could certainly use a better website. I’d like to give the city some advice on its priorities in building a better website. This blog post is my first round of advice, but I’d like to hear reactions from other web people in and around Burlington — or anyone else who has an interest in our city having a better website! This advice is based on the goals outlined by Mayor Bob Kiss: that the website is inline with the spirit of Open Government, is responsive, and is user-friendly.

First, the website must be accessible and use open standards. I put these two together because by using open standards the website can be accessible. Specifically, the website should use strictly semantic XHTML. This allows for its use in the widest range of user agents (browsers) by the widest range of user abilities (as opposed to disabilities). Its presentation should be progressively enriched through CSS and its behavior should be progressively enhanced through unobtrusive JavaScript. Progressive enhancement means that the website is useful, at its core, without any CSS or JavaScript. It becomes more useful through the use of CSS and then, perhaps, even more useful through the use of JavaScript. However, neither CSS nor JavaScript should be required to access the website’s content.

Second, the website should be built using free (as in freedom, not cost) and open source software. It is our government’s responsibility to use non-proprietary software wherever possible. When it comes to building websites and web applications, there are no excuses for not using free and open source software. The capabilities of the open web platforms available equal, or exceed, the capabilities of proprietary web platforms. Any custom software developed for the city’s website must be licensed to the city under a free and open source license (this does not mean that the city shouldn’t pay for this software to be developed).

Third, the city should embrace the concept of open linked data. This means that the city should publish data, not just content. This data should be both human and machine readable. This allows third parties to access raw data and repurpose this data in new and interesting ways. To this end, data and content should be either put in the public domain (which is probably the case already) or use a Creative Commons license. Where possible, the city’s website should consume open data published by others rather than duplicating effort. There are several technical approaches to publishing and consuming open linked data including Microformats and the Semantic Web.

I hope these recommendations are useful. Once I’ve heard some feedback from other web people, I’ll forward these recommendations to my city councilors and the mayor. Hopefully they’ll find it helpful in improving the city’s website!