User:Nickel Deuce/jquery

Introduction
My research project examined the effects of governmental support of open source projects. Some of the most popular and successful open source projects include Linux, Apache web-server, Firefox web browser, and Thunderbird mail reader. In all, there are tens of thousands of open source projects, with a broad range of uses, popularity, and success.

One of the frustrations of writing such a research paper is the relatively high level of technical expertise required to participate in the intellectual conversation and make objective evaluations of arguments. While many people may have vaguely heard about the ideas and ideals behind open source software, very few outside of developers actually interface with the projects themselves. To remedy this, I will briefly introduce a real-world, medium-size open source project, as well as explain the various technical and social parts which comprise an open source project.

I have chosen to explore the jQuery open source project. I have used the fruits of this project many times in personal projects and in professional web application development, and feel that it is a good representative of a typical, medium-size, medium to high-popularity open source project, and also has substantial infrastructure and a good community.

Project Description
The technical core of the jQuery project is a JavaScript library which aims to simplify the work of web developers. JavaScript is a scripting language which lets programmers manipulate parts of a web page. Useful features such as popups, control of menus, and many other things can be implemented and controlled using this language. A programming library is a set of related and commonly-used code which is especially organized and designed for re-use in other projects. Thus, jQuery is a collection of common functionality designed to be used in many different applications by different people.

While the technical innovations which set jQuery apart from other similar libraries are too detailed to include sufficiently here, at a broad level jQuery's main attraction is that it is easier to use and requires less modification to existing implementations. More technical reasons outlining jQuery's attractiveness are available in the links section at the end of this page.

Brief History
JQuery was created by John Resig as a personal experiment to evaluate new ideas in JavaScript programming. A preliminary project announcement was made, a simple website and mailing list were set up, and so the project humbly began, as many such open source projects do. Initially, only those interested in the specific design of the library were interested, but slowly interest in the project spread. As the project gained more users, the rate of development and adoption by other developers has also increased. Today, several large developers and projects such as Trac, Drupal, MSNBC, and Technorati (not to mention thousands of smaller projects and independent developers) use the library.

At various stages in the project's growth, Mr. Resig had to delegate certain areas of the project to different people and administrative programs. At first there was simply a single mailing list and a simple webpage; the website has gone through several iterations, and is now managed by a group of several people. There are now four different mailing lists. Over time, the core developer team has expanded from one person to six core members, and the group of core contributors now includes 15 individuals. Of course, there are dozens of others who help sporadically. The documentation has also evolved into a more delegated model, and now uses a combination of Wiki software and automatically generated documentation from source code.

Plugins and Examples
One of the great features of jQuery is that developers are able to create "plugins" which extend the functionality of the library. Here is a short list of some of the more easily-understood plugins:
 * Interface - A plugin to allow easy addition of interface elements such as draggable elements, sliding bars, and other such things (Demos)
 * Thickbox - A plugin which helps to display selected pictures or text front-and-center in a gallery-type of display (Demos: go to the page link, and click the "Demo" tab for each section)
 * Tabs - A plugin which allows for easy division of content into logical "tabs", and takes care of the boring details related to styling tabs and scripting the switching behavior (Demos)
 * Fish Menu - A proof of concept plugin which emulates the Mac OS X dock bar.

There are many more such plugins with a wide variety of uses. See the official list of jQuery Plugins.

Infrastructure Aspects
Essential to any open source project are a number of tools which reduce the technical barriers to successful collaboration. jQuery utilizes many of these standard tools in an effort to accelerate the development of the project, and to lower the entry barrier for people who want to become active developers or users of the project.

Version Control
In any sort of project involving the collaboration of people from diverse backgrounds, it is essential for the process of change to be managed and controlled. One way to deal with changes is to version them, and keep track of the changes made by each individual. This system is known as revision control, and many different such systems exist. In the case of Wikipedia, it is mostly text which is revision-controlled. In programming projects, the actual source code which comprises a program or parts of the project is versioned; this allows a programmer to see what has changed from one version of the code to the next version if a new problem has been introduced. Other useful information such as the person who made the change and the time and date are also tracked to form a picture of how the project is cobbled together piece-by-piece. jQuery uses the Subversion system for managing changes, and has a where one can view the different versions of project files.

Here are some sample operations that one can do to see the capabilities of the revision control system:
 * The main development folder
 * Viewing the differences between release 1.1.1 and 1.1.2
 * Timeline of recent changes
 * Top-level directory of plugin source folders
 * Viewing the source file for the Form plugin

Bug Tracker
With any written software, there will always be problems in the code, which are commonly referred to as bugs. When many people collaborate on software, there will inevitably some people who would like to have new features implemented in the next version of the software. For many projects, using a tool called a bug tracker enables people to report errors or defects in the software, and progress towards diagnosing or fixing them. These can also double as "feature trackers" which can similarly track the development and implementation of new features. There are many different bug-tracking packages out there. The one jQuery uses is integrated with its revision control system, and each bug, feature, or enhancement request is given a "ticket".

Here are some sample operations that one can do to see typical uses of the bug tracker:
 * Viewing all active tickets
 * The contents of a single ticket
 * Grouping of open tickets by release
 * Tickets related to the website

Testing / Building
With the rapid pace of project development, there lies a great opportunity for someone to accidentally break existing code. In an effort to subvert this unwanted tendency, many projects utilize automatic testing and regression tools to automatically check software for compliance to expected behavior. For more typical non-web software, testing frameworks and methods are much more developed. However, jQuery is not one of these, and as such the testing framework is less-standardized, but still extensive by comparison to similar projects.

Examples of testing scripts for for jQuery and plugins:
 * Test Suite for Form plugin
 * jQuery main test suite (broken?)
 * Speed tests between new and old versions

Documentation
For every person knowledgeable about a project's details, there are many more people who do not know anything about the details of a project. This is the primary barrier to entry for software projects. Documentation spells out in minute detail how each part of the project's program or library works. Because this information is essential for adoption, the quality of said information is what often compels prospective users to gravitate towards some projects and to be intimidated (and scared away) from others.

jQuery's documentation in its entirety is generated automatically by pulling out specially-formatted comments within the source code itself. For example, see the source code and comments for the bind function, and see the same information on the website documentation page (though formatted more nicely). This inline inclusion of comments also makes sure that comments are included in the revision control system as well, and are kept in sync with an code changes. Past changes of the documentation can give a glimpse of what has changed, at a higher level than viewing actual lines of code. Being able to automatically generate documentation means that it can be easily put into other forms: for example, many people find Visual jQuery Documentation easier to use than the official documentation.

Tutorials
Like many other kinds of tutorials, software tutorials help to explain how to do common tasks with a new set of tools. Tutorials are an extension of the documentation, and are by design much easier to directly read and profit from. They are also an important part of the community aspect: tutorials are usually written by members of the community and not the actual developers themselves. This in turn fosters community involvement in writing and improving tutorials, answering questions, and friendly competition and cooperation in making the project's details more accessible to everyone.

In the case of the jQuery project, many tutorials exist, and can be broken into two categories: official and semi-official. Official tutorials are located in their own section, separate from documentation pages on the main jQuery website. The intent of these tutorials is to introduce the library through examples, and in simpler and clearer terms than the official, technical documentation. Other "semi-official" tutorials are located on the rest of the page, as well as on other websites. For example, several individuals contribute to http://www.learningjquery.com, a blog-style website with the primary aim of disseminating high quality tutorials concerning various aspects of the jQuery library. Documentation for plugins is often presented in tutorial format, as the smaller size of the code does not warrant a full-scale documentation regime. An example of this is the relatively short documentation for the jqModal plugin developed by Brice Burgess.

Mailing Lists
For many open source projects, the mailing list is the most vital channel of communication for the project. Typically there will be several mailing lists per project, each having a separate theme and intended audience. While it depends on the mailing list, many are used for questions from users, reporting and discussing bugs, deliberating about new features or policy changes, and other communications related to the project. Almost all mailing lists archived in some form or another, allowing both subscribers and non-subscribers to browse past postings, and link to posts from an external medium (such as a blog, email, newsgroup, printed communication, or IRC chat). In contemporary projects, mailing lists are automatically managed by specialized software.

In the beginning, there was only a single mailing list, called jquery-discuss. Due to the enormous growth in popularity and volume of the mailing list, it eventually was split into four different mailing lists, each with their own level of discusssion:


 * jquery-en - the place where common users can ask questions, solve problems, and discuss general issues of jQuery.
 * dev-jquery - the mailing list for developers of the jQuery library itself. Here technical issues are discussed, coding tasks are assigned, and users can ask questions about the library itself (e.g., inquiring about bugs or requested features)
 * web-jquery - the mailing list for all things related to the website, including errors or bugs, feature suggestions, and coordination of efforts.
 * plugins-jquery - the mailing list specifically for discussions pertaining to plugins. This includes discussion of plugin development, feature requests, bug reports, and anything else.

The mailing lists are available as individual emails, a digest version, or as an RSS feed. Additionally, the lists are archived on the web, and sorted by thread.

Community Blog
A blog is a medium of communication which grew out of private diaries, and nowadays kept to discuss a wide range of topics, from daily rants to professional reviews of programs, movies, or anything. Because blogs can have multiple authors, they are well-suited to serve as a community news service. The official jQuery Blog is maintained primarily by John Resig, and also by the marketing/evangelism team members. It utilized to provide announcements related to the project such as new and upcoming releases, new plugins, noteworthy sites related to jQuery, or other things of interest.

Chat room
The IRC Chatroom for jQuery is hosted by FreeNode, and is primarily utilized for real-time help and discussion. It is not utilized nearly as much as the mailing lists, but still is helpful for quick questions. One can log in to the channel and ask other chat participants their thoughts about an proposed feature, or ask for assistance in diagnosing and/or fixing a bug. Any standard IRC client can be used to access the chat channel. More details about jQuery's chat channel are on the website.

Meetings
It is common in larger or more popular projects for users and developers to gather formally or informally at conferences and other industry events. Such gatherings enable people to network, and to converse with those of similar interests. This year, the jQuery team had an informal gathering at the 2007 SXSW Interactive conference/festival in Austin, TX (Pictures).

Project Homepage
The project website is the essential glue which holds together the various infrastructure and community elements of the project together. It serves as a hub to serve two groups of people: outsiders/visitors to the project, and members of the community. Because it serves as the starting point for people of all different levels of involvement and interest, it must be well designed to project a positive outward image, as well as efficiently designed so that the community around it can operate well.

The jQuery website links together all of the disparate aspects of the project talked about thus far, from documentation, mailing lists, tutorials, plugins, source repositories, bug tracking, and general information. It takes the strategy of being mostly user-oriented, placing prominently on the page resources such as plugins, documentation, and tutorials to help out the user. Development of the project itself is separated off into separate parts of the website, as most development work on the library is discussed on a separate developer's mailing list.