Wednesday, July 29, 2009

Free/Open Source and Proprietary Software Symbiosis

See Free/Open Source and Proprietary Software Symbiosis at its new home on bradley-holt.com.

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

See Domain-Driven Design at its new home on bradley-holt.com.

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.

Thursday, July 16, 2009

Free ZendCon Pass

See Free ZendCon Pass at its new home on bradley-holt.com.

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.

Monday, July 13, 2009

New Media Office Hours (East)

See New Media Office Hours (East) at its new home on bradley-holt.com.

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!

Thursday, July 9, 2009

HTML 5, HTTP Methods & REST

See HTML 5, HTTP Methods & REST at its new home on bradley-holt.com.

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 methodURIresult
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.

Tuesday, July 7, 2009

Jelly!

See Jelly! at its new home on bradley-holt.com.

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.