Archive for the ‘Web Apps’ Category
Managing Multiple Build Environments
Last updated: 3 March, 2010
One of the challenges of Web development is managing multiple build environments. Most applications pass through several environments before they are released. These environments include: A local development environment, a shared development environment, a system integration environment, a user acceptance environment and a production environment.
Automated Builds
Automated builds provide a consistent method for building applications and are used to give other developers feedback about whether the code was successfully integrated or not. There are different types of builds: Continuous builds, Integration builds, Release builds and Patch builds.
A source control system is the main point of integration for source code. When your team works on separate parts of the code base, you have to ensure that your checked in code doesn’t break the Integration build. That’s why it is important that you run your unit tests locally before checking in code.
Here is a recommended process for checking code into source control:
- Get the latest code from source control before running your tests
- Verify that your local build is building and passing all the unit tests before checking in code
- Use hooks to run a build after a transaction has been committed
- If the Integration build fails, fix the issue because you are now blocking other developers from integrating their code
Hudson can help you automate these tasks. It’s extremely easy to install and can be configured entirely from a Web UI. Also, it can be extended via plug-ins and can execute Phing, Ant, Gant, NAnt and Maven build scripts.
Build File
We need to create a master build file that contains the actions we want to perform. This script should make it possible to build the entire project with a single command line.
First we need to separate the source from the generated files, so our source files will be in the “src” directory and all the generated files in the “build” directory. By default Ant uses build.xml as the name for a build file, this file is usually located in the project root directory.
Then, you have to define whatever environments you want:
project/
build/
files/
local/
development/
integration/
production/
packages/
development/
project-development-0.1-RC.noarch.rpm
integration/
production/
default.properties
local.properties
development.properties
production.properties
src/
application/
config/
controllers/
domain/
services/
views/
library/
public/
tests/
build.xml
Build files tend to contain the same actions:
- Delete the previous build directory
- Copy files
- Manage dependencies
- Run unit tests
- Generate HTML and XML reports
- Package files
The target element is used as a wrapper for a sequences of actions. A target has a name, so that it can be referenced from elsewhere, either externally from the command line or internally via the “depends” or “antcall” keyword. Here’s a basic build.xml example:
<?xml version="1.0" encoding="iso-8859-1"?>
<project name="project" basedir="." default="main">
<target name="init"></target>
<target name="test"></target>
<target name="test-selenium"></target>
<target name="profile"></target>
<target name="clean"></target>
<target name="build" depends="init, test, profile, clean"></target>
<target name="package"></target>
</project>
The property element allows the declaration of properties which are like user-definable variables available for use within an Ant build file. Properties can be defined either inside the buildfile or in a standalone properties file. For example:
<?xml version="1.0" encoding="iso-8859-1"?>
<project name="project" basedir="." default="main">
<property file="${basedir}/build/default.properties" />
<property file="${basedir}/build/${build.env}.properties" />
...
</project>
The core idea is using property files which name accords to the environment name. Then simply use the custom build-in property build.env. For better use you should also provide a file with default values. The following example intends to describe a typical Ant build file, of course, it can be easily modified to suit your personal needs.
<?xml version="1.0" encoding="iso-8859-1"?>
<project name="project" basedir="." default="main">
<property file="${basedir}/build/default.properties" />
<condition property="build.env" value="${build.env}" else="local">
<isset property="build.env" />
</condition>
<property file="${basedir}/build/${build.env}.properties" />
<property environment="env" />
<condition property="env.BUILD_ID" value="${env.BUILD_ID}" else="">
<isset property="env.BUILD_ID" />
</condition>
<target name="init">
<echo message="Environment: ${build.env}"/>
<echo message="Hudson build ID: ${env.BUILD_ID}"/>
<echo message="Hudson build number: ${env.BUILD_NUMBER}"/>
<echo message="SVN revision: ${env.SVN_REVISION}"/>
<tstamp>
<format property="build.datetime" pattern="dd-MMM-yy HH:mm:ss"/>
</tstamp>
<echo message="Build started at ${build.datetime}"/>
</target>
<target name="test">
...
</target>
<target name="clean">
<delete dir="${build.dir}/files/${build.env}"/>
<delete dir="${build.dir}/packages/${build.env}"/>
<mkdir dir="${build.dir}/files/${build.env}"/>
<mkdir dir="${build.dir}/packages/${build.env}"/>
</target>
<target name="build" depends="init, test, profile, clean">
...
</target>
...
</project>
Using ant -Dname=value lets you define values for properties on the Ant command line. These properties can then be used within your build file as any normal property: ${name} will put in value.
$ ant build -Dbuild.env=development
There are different ways to target multiple environments. I hope I have covered enough of the basic functionality to get you started.
TypeFriendly: A Documentation And User Manual Builder
TypeFriendly is a documentation generation script written in PHP5. It was designed to be easy in use and it allows to achieve the first results immediately, a couple of minutes after you start the work. The script contains everything you need to write clear, multilingual documentation for your project, so that you do not have to code everything on your own.
The most important features of TypeFriendly:
- Modular documentation structure – it is generated from text files and the structure and navigation are generated from the file names.
- Simple syntax – the text is written in intuitive and clean Markdown syntax.
- Multilingual support and tools – TypeFriendly allows you to create your manuals in many language versions. It also contains a tool that shows whether the derived languages are up-to-date.
- Configurable output formats – currently, TypeFriendly is able to generate the documentation in XHTML (many pages) and XHTML (single page). There is also a third format – metadata – still under development. It will allow to import the docs to a database in order to make an on-line version with, for example, user comments.
- Various add-ons such as syntax highlighting, references, class description fields.
- Navigation generators.
- It is portable – works under Linux, FreeBSD and Windows. All you need is the PHP interpreter available.
TypeFriendly is distributed under the terms of GNU General Public License 3, which means that you can use, modify and share it for free.
Demo
http://static.invenzzia.org/docs/tf/0_1/book/en/index.html
http://www.invenzzia.org/en/projects/typefriendly/screenshots
Source Code
http://svn.invenzzia.org/browser/TypeFriendly/trunk/
Is this the best open source CMS ever created?
Meet TYPOlight, a powerful Web content management system that specializes in accessibility (back end and front end) and uses XHTML and CSS to generate W3C/WAI compliant pages.
Accessibility
A growing number of countries around the world have introduced legislation which either directly addresses the need for websites to be accessible to people with disabilities, or which addresses the more general requirement for people with disabilities not to be discriminated against. TYPOlight does not treat accessibility as just an additional feature and is thoroughly accessible.
Web 2.0
PHP 5 and Ajax are modern “Web 2.0″ technologies that you can find in a lot of contemporary applications. TYPOlight has a solid codebase built on the new object-oriented programming features of PHP 5 and can therefore be considered a future-proof software. To ensure back end accessibility, every Ajax feature includes a graceful fallback in case JavaScript is disabled.
Page features
- Different page types
- Multiple websites in one tree
- Manual or timed publication
- Hidden pages
- Password protect pages
Editing features
- Clipboard feature
- Edit multiple records
- Built-in rich text editor (TinyMCE)
- Different content elements and modules
- Multilingual spellchecker
- Insert tags (similar to server side includes)
- Manual or timed publication
File manager
- Multiple file uploads
- Image thumbnails and file preview
- Edit uploaded files with the source editor
- File operation permissions
- Copy, move, rename files or folders
- Delete folders recursively
Form generator
- Automatic input validation
- Store uploaded files on the server
- Send form data via e-mail
- Send uploaded files as e-mail attachment
Search engine
- Automatic page indexing
- Search indexing on protected pages
- Phrase search, wildcard search, AND/OR search
- Search result caching and pagination
Full feature list
- Intuitive user interface
- Accessible XHTML strict output
- Meets W3C/WAI requirements
- Web 2.0 support (mootools-based)
- Live update service
- Accessible administration area
- Multiple back end languages and themes
- Generates search engine friendly URLs
- Multi-language support
- Powerful permission system
- Versioning and undo management
- Advanced search and sorting options
- Front end output 100% template based
- Automatic e-mail encryption (spam protection)
- Supports SMTP in addition to PHP’s mail function
- Supports multiple websites in one tree
- Supports GZip compression
- Print articles as PDF
System features
- Open Source (LGPL)
- Web-based administration
- Platform independent
- Over 150 third party extensions
- Multilingual documentation
Links
Real Time Web-Based Service Monitoring Tool
phpWatch is a general purpose service monitor that is able to send notifications of outages via e-mail or text-message (SMS). The purpose of this system is to allow administrators to easily check the status of many different services running on any number of servers and also allow developers to interface with the query and notification APIs.
Installation
The basic installation is very simple: chmod config.php to 777 and simply navigate to the install directory in your browser. Fill in the database information and the setup will create the required tables and setup the configuration file as needed. The only required task beyond the automated install is to add cron.php as a cron job (Unix/Linux) or scheduled task (Windows).
SMS Alerts
phpWatch uses pre-existing SMS gateways provided by the cell-carriers themselves. For example, to send a message to a Verizon subscriber with the phone number 123-456-7890, an e-mail can be sent to 1234567890@vtext.com and it will then be forwarded to the individual’s phone.
Links
Write, share and sell your own books
As commercial book publishing crashes, personal book publishing is booming. Blurb is an online application which can be used to design and print your books in professional looking formats. Blurb makes it easier for you to write, share, promote and sell your own books.
Blurb BookSmart software is the most straightforward and easy to use software available. Multiple demos and tutorials are available, showcasing the potential that each Blurb book offers. Some of the books you buy on Amazon are manufactured with this same technology. You just can’t tell the difference!
From their site:
Holding a finished book with your name on the cover is a truly amazing feeling; it’s one of those experiences everyone should have. As software people, designers and publishing professionals at the top of our game, we realized something both incredible and obvious: there’s no good reason why it should take tons of time, technical skills, big bucks or friends in high places to publish a book. Or a zillion books, for that matter.
Blurb Features
- Design your book with free software
- Print your book by ordering online (as few as 1 book needs ordering)
- Books created are of bookstore quality
- Free to register and design books
- Use the site to promote your books
- Print your books with or without the Blurb Logo
Time to write some books :)
Links
Omeka: A Web-based Publishing System

The Center for History and New Media has released an open source version of their Web-based publishing system built on top of the Zend Framework.
Omeka is a Web-based publishing platform for scholars, librarians, archivists, museum professionals, educators, and cultural enthusiasts. Its “five-minute setup” makes launching an online exhibition as easy as launching a blog. Omeka is designed with non-IT specialists in mind, allowing users to focus on content and interpretation rather than programming. It brings Web 2.0 technologies and approaches to academic and cultural websites to foster user interaction and participation. It makes top-shelf design easy with a simple and flexible templating system. Its robust open-source developer and user communities underwrite Omeka’s stability and sustainability.
Thank you guys for open sourcing this great application!
Links
- Website
- Documentation
- Demo (demo/sandbox)
- Source Code
A Lifestreaming Zend Framework Application
There are just too many social sites out there for everyone to be able to keep up, and that’s where PHPLifestream steps in. PHPLifestream is an application that aggregates feeds from different sources and combines them into one. Developed by Johan Nilsson and built on top of the Zend Framework, PHPLifestream is a powerful Web 2.0 lifestreaming application that you’ll want to keep an eye on.
Great open source PHP application!
Demo
http://johannilsson.me/streams/list
http://johannilsson.me/graphs
Source Code
http://github.com/johannilsson/phplifestream/tree/master
Share songs for immediate streaming
First came TinyURL, now TinySong. Just as TinyURL allows you to shorten long URLs for sharing in Twitter and elsewhere, TinySong does the same for sharing songs for immediate streaming.
Other tiny sites:
TinyChat
TinyChat is a service for creating disposable chatrooms. Each chatroom gets a unique TinyURL for easy sharing, and nobody involved needs special software to join in.
TinyGeoCoder
Tiny Geo-coder is a basic online app for determining the latitude and longitude of a location, with a simple API and practical uses for web development.
TinyScrum
Scrumy is a simple web application for Scrum project management. Scrumy is, at the basic level, a virtual taskboard.
Zend Framework Packageizer
Jani Hartikainen created one of the most innovative Zend Framework applications of 2008, the Packageizer. It allows you to choose a ZF component with all its dependencies and download it as a PHAR or ZIP file.
The Zend Framework community is getting bigger and more creative, and users are building more and better web applications. But, unfortunately, no one knows where these applications are or who developed them.
Community to Zend, community to Zend, do you copy? Over.
Add live support to your Website
Have you ever thought, “If only I could allow my visitors to chat live with me while they browse my site?” Now you can. Open Web Messenger is an open source live support chat application. It enables customers and visitors to chat with an operator and get support.
Main features
- Unlimited operators, chats, and users
- Priority queue of visitors
- Chat button for email signatures
- Differing buttons on same website
- Reconnect automatically if the internet connection went down
Server requirements
- PHP (5.x and above) with MySQL support
- MySQL 5.0 and above