Vermont 3.0

Jason and I (from Found Line) will probably be stopping by Vermont 3.0 on Saturday. We’re not exhibiting but I’m curious to see what it’s all about. If you’re planning on being there then let me know. You can either comment on this blog entry or, if you’re own Twitter, send an @ reply (I see all replies even if I’m not following you) to BradleyHolt. If you already have my contact info then feel free to send me an email or instant message instead. See you there!

PHP In Google App Engine?

According to the newly posted App Engine Product Roadmap, there are plans to add “support for a new runtime language.” In an email to the Google Apps Small Business Solution Providers mailing list Google had this to say:

“Of particular interest, may be payment for additional resource usage and a new runtime language – I can’t say what this language is, but you can probably guess if you’ve been following along with community demand.”

Looking at the issue list, support for Java is the most requested item followed by support for PHP, Ruby, then Perl. If you haven’t already, please go star the “support for PHP” issue (please don’t comment on it as it will email everyone who has already starred it – just star it!). Of course, I’m hoping Zend Framework is the framework of choice for all the App Engine specific APIs as well.

Zend_Container Thoughts

It seems that there’s some interest in my Zend_Container proposal including possibly using it as part of Zend_Application. I still need to move Zend_Container from “New” to “Ready for Review” but first I need to add some more details to the proposal. I want to talk about some thoughts on Zend_Container that may be helpful in understanding how it could be useful. For those who aren’t familiar with it, Zend_Container is a proposal for a simple dependency injection container in Zend Framework.

I have been asked to show some more use cases for Zend_Container. I think the main thing that people want to see (correct me if I’m wrong) is how Zend_Container would be used as part of a larger web application. In order for Zend_Container to work, it needs to “contain” all of the components that it will be responsible for managing. This means that every component that will either a) be a dependency for other components or b) have a dependency on other components (or both) needs to get added to the container.

In the proposal I show an example of the getComponent method as a way to get instances out of the container. However, use of this method is discouraged. You should instead use setter injection (I’m not sure yet if the proposal will support constructor injection) and let the container provide the instance for you. Dependency injection is sometimes referred to as “inversion of control (IoC)” because it requires you to invert your thinking. In your individual components you are giving control over to the container and letting it provide your dependencies for you rather than reaching out and fulfilling these dependencies yourself (as is done currently with Zend_Registry). This is why every component needs to be added to the container — how else would the container know what to inject or even be able to perform this injection?

This inevitably leads to the question, how do we bootstrap all of this? In other words, how do we get all of these components into the container in the first place so all of this “magic” can happen? In the proposal, I showed examples of manually adding components using the addComponent method. This is a great way to add components and there is nothing wrong with doing this. However, this could start to become impractical if you have a lot of components to add to the container. Another option is to use configuration to add all of the components. I don’t have an example of this yet in the proposal, but the basic idea is to list a bunch of components in your configuration and let Zend_Container add all of the components based on this information. This is more practical when you have a lot of components to add to the container.

Another option, which is not yet in the proposal, is to use a combination of directory/file scanning and reflection to add components. This could be hugely beneficial to modular applications – simply drop in your module directory and Zend_Container could automatically load components from your module. This is the sort of thing that I think the people working on Zend_Application thought might be helpful (let me know if I’m way off-base here). Of course, this opens up a host of potential efficiency issues that would need to be thought through (i.e. components should probably be “lazily” loaded and implementation/interface mappings maybe should be cached).

While I haven’t yet provided any more use cases, I hope this information is helpful in understanding the role Zend_Container could play within Zend Framework. As always, I’m open to feedback even though the proposal isn’t officially “Ready for Review.” So far I’ve mainly focused on the “pure” dependency injection parts of the proposal so any other ideas on how Zend_Container could be used as part of a larger application would be great.

BTV PHP UG Meeting

The Burlington, VT PHP Users Group will be meeting tomorrow night at Bluehouse Group in Richmond. David Walsh of Standards Technology Group (STG) will be giving a demo of STG’s web application. STG will also be providing massive amounts of pizza. Matthew Weier O’Phinney, Software Architect for Zend Framework, will be giving a presentation on using Dojo, a JavaScript framework, within Zend Framework. More details are available here.

Found Line Software License

We recently made the strategic decision to license all software developed by Found Line under the New BSD License. This is a free/open source software license meaning that our clients will have the four freedoms as outlined by the Free Software Foundation. Basically, this means that clients are free “to run, copy, distribute, study, change and improve the software” that we develop for them. The New BSD License also gives our clients another, more controversial, “freedom”: the “freedom” to turn the free/open source software we have licensed to them into proprietary, non-free/non-open source software. This is a “freedom” we hope is not exercised but is something we understand may be important to our clients.

We made this decision for several reasons. We are strong believers in the free/open source software movement. To us, this means not just using free/open source software but also contributing to free/open source software. While this software is currently only licensed to individual clients, we plan on licensing specific components publicly in the future (and, of course, individual clients currently have the right to do this as well). For now, this decision makes it really easy for us to publicly release specific components to the community as it makes sense.

Many of our web applications are built using existing libraries, Zend Framework being the most common. Zend Framework is also licensed under the New BSD License so this provides consistent licensing for our clients. Also, I would like our business to contribute back to Zend Framework and this license parity helps make this simpler.

This licensing allows us to give our clients the most freedom while still protecting our right to reuse individual components (which helps keep costs down). We are in the business of creating value for our clients and are not interested in locking them into proprietary software contracts. This licensing gives our clients many options such as switching to another vendor in the future or even bringing web development work in-house. If clients are going to pay us to develop, maintain, or extend their web applications we want this to be because we’re the best team for the job — not because they don’t have a choice due to vendor lock-in.

VSA Arts of Vermont Website

We recently launched the updated VSA Arts of Vermont website. Since VSA Arts of Vermont’s mission is to make “the world of the arts accessible to Vermonters of all abilities” it was critical that their new website be accessible. This was a challenge we readily accepted as web accessibility is something we take very seriously.

Web accessibility is fairly straightforward if you take a content-first approach and focus on web standards. The real challenge is doing this and making a great looking website that doesn’t have to compromise on functionality. We accomplished this by using semantic XHTML that contains enough structure to stand on its own without any visual representation. Then, this content was stylized using CSS. Finally, some behavior was added using unobtrusive JavaScript (using jQuery). This concept is called progressive enhancement. The final result is a great looking and very functional website that is accessible to all users.

Proprietary Skype

Peter Saint-Andre (Executive Director of the XMPP Standards Foundation) has pointed out the Free Software Foundation’s recent addition of a “Free software replacement for Skype” to its list of High Priority Free Software Projects:

Skype is a proprietary Voice-over-IP program that uses a proprietary protocol. Skype is seducing free software users into using proprietary software, often two users at a time. We do not want to encourage the creation of a Skype compatible client, but instead, we want to encourage you to create, contribute to, or promote the use of free software alternatives to Skype, such as Ekiga, and to encourage to adoption and use of free VoIP, video, and chat protocols such as SIP and XMPP/Jingle.

I have long been annoyed by Skype’s closed platform and have refused to use it despite its popularity. Skype users can only communicate with other Skype users (or PSTN users through SkypeOut) because they do not use an open standard and do not federate with other VoIP providers. This destroys much of the value proposition of using VoIP and ultimately reduces VoIP (in people’s minds) to simply “free/cheap phone calls.” In other words, Skype is helping to hold back an entire industry from innovating.

At Found Line, we use two open VoIP standards: XMPP and SIP. Google Talk provides our XMPP service (through Google Apps) and is used mainly for internal communications. However, Google Talk is connected to the public XMPP network so, just like with email, we can communicate with anyone else using the same standards. Junction Networks provides us with very reliable SIP hosting and allows us to communicate (at no cost) with anyone on any public SIP network. They also provide us with a PSTN gateway (so that we can make “normal” phone calls) and a hosted PBX (auto attendant, unlimited extensions, etc.) all at a very reasonable price.

ZendCon Summary

Rafael Dohms has posted a good summary of ZendCon ’08. He touches on several topics including performance, testing and code analysis, PHP’s integration with other technologies, Zend Framework, and some interesting things to look forward to in 2009 including Ibuildings’ PHP Center of Expertise.

Orange Mountain/True Soap Website Launched

We just launched the Orange Mountain/True Soap website. Jason and Dave did a great job on the design and Liz did a fabulous job getting all of the content organized! Although there’s no real functionality at the moment, it’s built using Zend Framework so that we can add features later. There’s an article in the Burlington Free Press today about the company and product if you’re interested.

Don’t Vote