Some Bash tricks: CDPATH and ~/.inputrc

August 14, 2010

With the help of the obnoxious desire to be as efficient as possible when using the command line, I’ve browsed the Internet looking for new ways of achieving a new level in geekdom.

As such, I’ve come across some interesting features of Bash that I’m currently using (quite proficiently).

The first one is the CDPATH Bash variable. If you do a man bash and search for it, it’s quite clear what it does. It allows you to specify additional folders (search paths) where the cd command should look into. The same manual page states, when talking about cd “The variable CDPATH defines the search path for the directory containing dir. Alternative directory names in CDPATH are separated by a colon (:)”. How’s this helpful? For example I have a folder $HOME/school/current/ where all school related folder reside. I simply add that folder to the CDPATH and, for example, wherever I call cd so from, it changes to $HOME/school/current/so.

Here’s a sample run scenario on my laptop

razvan@valhalla:~$ echo $CDPATH
.:/home/razvan/school/current:/home/razvan/projects
razvan@valhalla:~$ cd so
/home/razvan/school/current/so
razvan@valhalla:~/school/current/so$ cd p2p-next
/home/razvan/projects/p2p-next

It’s pretty neat! Whatever the current directory, if I do a cd so or cd p2p-next it gets me to the precise folder without the need to write the whole (sometimes cumbersome) path. A minor disadvantage is that there’s no cd Bash completion for files other than those in the current directory; you have to type the whole path of a folder reachable through CDPATH. Bash completion for the cd command works for paths reachable through CDPATH, provided the bash-completion package is installed.

Of course, in order to make it persistent, you’ll have to add a line such as the one below to your ~/.bashrc file:

export CDPATH=.:$HOME/school/current:$HOME/projects

You can find more info by issuing a simple Google search.

The second one is the INPUTRC file. There is a global /etc/inputrc file and a per-user ~/.inputrc file. The INPUTRC file defines Bash behavior with respect to keyboard input; it’s being used by the GNU Readline Library. There are a lot of features that may be tuned using the INPUTRC file.

The ones I’m using at this point is using TAB to show all matches in case of ambiguity for completion (similar to a TAB-TAB) and ignore case for completion. So, here are my two lines of configuration:

razvan@valhalla:~$ cat ~/.inputrc
set show-all-if-ambiguous on
set completion-ignore-case on

The ability to control the Readline library through INPUTRC is cool and useful. Check the documentation for the features you’re interested in.

Bow before me, for I am root

April 6, 2010

I really love ThinkGeek T-shirts. Too bad they blacklisted Romania for some strange financial reasons :-P . One of my favorite T-shirts (and quotes) is this one.

I guess I wouldn’t be a complete narcissist if I didn’t show off pictures such as the one below to prove my worthiness for wearing a T-shirt like that.

Cluster SSH in action

SSH multiple root access through ClusterSSH

Praises to the people

December 29, 2009

I am aiming to use this blog only for technical matters. No opinions, politics, activism. However, I would like to create some posts regarding people, such as this one. These posts will still revolve around technical aspects, but will rather focus on people, motivation, collaboration.

This particular post is a way of showing my appreciation to people who have had (and still have) a positive influence on me, mostly on a professional level, but not only that.

As an active member of the Computer Science Department, the Automatic Control and Computers Faculty, I’m being able to meet a lot of interesting and highly capable people. These interactions have positive results: new things learned, new ways of thinking, new opinions etc. These changes of ideas and opinions have a positive impact on myself as well as on them.

Out of the people I’ve met and interacted during these years, there is a subset of truly remarkable people who I’m proud to know and to hang around with. Their views, skills, opinions, energy, effort, involvement are motivating and helping me to achieve higher and higher goals. It is in this effervescent environment that I am continuously developing new skills, polishing and upgrading old ones, finding and learning new things, resulting in my always being jolly and ready for action.

The list below is not exhaustive. There are other people which I am proud to know and whose actions have a profound influence on me. The people below are, however, “creme de la creme”. So, without further ado, here are my “praises to the people”.

Mircea Bardac is what I would call “the perfect technologist”. If I were to write a piece code regarding Mircea that would be mircea_bardac == technology. While some other people, including me, are technically proficient, Mircea is one of the most equidistant people when forming a technological opinion. Some people are open-source fans, web fans, CLI fans etc., but Mircea is bound to give an reasoned opinion on a technical matter. He is always on par with the new technological advances and solutions and is usually the driving force for implementing a new idea. Whatever the problem, Mircea has one good solution for it (at least).

Andrei Buhaiu is a self-proclaimed gamer, lazy Moldavian, anti-anything and pro-everything. He is among the funniest people I have ever met and he’s the person you can’t feel sad around. His funny faces, lines, quotes and general movement make him the one person you want to have around. He is as able to make fun of others as he is to make fun of himself (_very_ able). Add to this his imaginative nature and technical proficiency and you’ve got a perfect combination of the Mad Hatter, Mark Twain, Larry Wall, J. R. R. Tolkien and George Carlin.

Vlad Dogaru is one the smartest people I’ve known. Smart as in intelligent – his tastes for clothes are even worse than mine. His intelligence is only surpassed by his heavy cursing and drinking abilities. He is what I would call a “cult” computers’ person: hacker, geek, engineer, scientist, advanced user. He is the Vim expert to turn to and one of the people who spend the most amount of time browsing the “technical Internet”: blogs, IRC, technical sites etc. He possesses an astonishing speed of learning new things (which is funny because he is one of the most conservative people I have ever seen when dealing with certain subjects). He is the one I would choose as a partner if I were to take part in a technical competition.

Bogdan Doinea is the happy-camper, go-getter, make it happen, let’s do this kind of person. His enthusiasm, passion and optimism are a driving force for any project or activity. He is one of the few people I know who can actually sing, and this is a big plus. He is very quote-friendly and he’s a wonderful presence in any discussion (be it live or online). And, despite being caring about his looks, Bogdan is very caring about his professional level: his presentation and training skills are some of the best around. With good technical background and a solid desire to learn more and teach more, he is a team must-have.

Alex Eftimie (or 3ftimie), the self-styled “Lord Ubuntu”, is an ardent support of FOSS, open standards and localization/internationalization (l10n, i18n), the latter of which is the cause of funny frictions within the ROSEdu community. Quite the opposite of Andrei Buhaiu’s “might-oriented” approach (do things first, ask questions later), Alex uses a cool, rational, “let’s think it through” approach. He does, however, possess an incredible amount of enthusiasm and will power and is a major contributor in many projects (maybe more than me, which is not necessarily a good thing). Resourceful, passionate, intelligent, hardworking, Alex is the most reliable person I know.

Lucian Grijincu is challenging both Alex Eftimie as FOSS supporter and Tavi’s sleeping habits. His life style is somewhat similar to that of a vampire: he sleeps during the day, works during the night; as of this point there is no confirmation of him drinking blood, though I haven’t yet seen him eat garlic. Lucian is simply put a hacker, in the original meaning of the word: a person who likes tweaking stuff, learning new things, solving problems, using a non-conventional/hackish approach whenever the opportunity arises. He is amongst one of the most technically proficient people I know and possesses an almost unquenchable thirst to learn new things. He does have his ups and downs during his involvement, but once he gets started he’s like hurricane: an unstoppable, full throttle, goal oriented “beast”.

Alex Juncu, better known as AJ, is, jokingly “the person who does the most things and finishes none of them”. Admittedly, the main problem when working with AJ is not persuading him to do something, but rather persuading him _not to_. He can easily be compared to a flip-flop due to his two states of spirit: overly depressed and overly excited. In his overly excited state, AJ is like the newest model of Ferrari: high speed, intense sensations and rapid reach of the destination. So, as long as you keep him in the overly excited state, his energy level is similar to that of a supernova; this roughly translates to having access to the human resources of a multi-national company. AJ is the person mostly likely to respond with “For how many days?” to the request “Please don’t fall asleep.”

Mihai Maruseac, better known as MM, is easily identified by his “infinite blog”. His blog is an infinite set of sets. Each set is, in its turn, infinite. So, you’ve got the master of infinity right here. MM, is like AJ, a do-everything-you-can kind of person; the only difference being that he also blogs about it :-) . I think MM has one of the highest productivity when thinking of end-result with respect to time consumption. He is highly intelligent and possesses the widest array of technical skills and knowledge, ranging from physics, mathematics, logic, computer science and philosophy. He is well reasoned in his debates and his analytical approach is perfect for feedback, advices and suggestions.

George Milescu is a model of involvement and “political consideration”. He’s always careful about not stepping on other people’s toes (unlike me) and he’ll take all opinions and constrains into consideration before making a decision (again, unlike me). He does have some conservative views, but he is nevertheless a major contributor to the success of new ideas, approaches and projects. His high effort sustainability, involvement, reliability make him an invaluable member in a team. He’s got great teaching skills (he’s fun and energetic) and he’s my partner of choice in a teaching/training activity. On the fun side, he has a remarkable talent of being serious when making a joke and its fun to see people (myself included) reacting as if he really meant what he said.

Andrei Pitiș is the most no-nonsense, straight to the point, make it happen people I’ve met. While I usually aim for a no-nonsense approach on things, Andrei’s “let’s not waste time on this, let’s get to the other thing” attitude is unparalleled and refreshing. He’s the perfect example of a commercial environment getting things done properly and in time. He’s always striving to make things better and, while this does imply pressure, stress and effort, the end results are worth it. He’s a “cult” technical person, due to his vast experience, knowledge and human connections; his overall view, opinions and suggestions on a given subject are very useful and beneficial.

Vlad Posea is a cool approach kind of person. Vlad is highly analytical and rational and his actions are always centered on making a certain activity or context work better. A perfect example of cultural creative, Vlad is concerned about society, the environment, education and many other things. He is highly involved and reliable in his activities and is one of the best people to team up with. While sometimes pessimistic, Vlad is always there to lend a helping hand and his involvement is of great importance. Vlad has done a great job bridging the gap between the commercial and the academic environment with ASPI‘s Stagii pe Bune program. If there were a Public Relations office in our faculty, Vlad would probably be one of its major contributors.

Octavian Purdilă, better known as Tavi, is the most knowledgeable and proficient person when dealing with operating systems, low-level/system programming and software engineering. A “pure” hacker, Tavi is the person with the heaviest impact on my professional/technical skills. When I met him as a teacher for the Operating Systems Design course I was already keen on operating systems and related subjects. It was during that semester, however, that I developed an (almost) obsessive passion for operating systems concepts and system programming that’s lasting until this day. Tavi is all-around knowledgeable and his rational consideration, objective views and technical expertise make him an invaluable partner. Due to his helpful nature, non-patronizing suggestions and to-the-point responses, he’s one of the best people to turn to when facing a technical problem.

Daniel Rosner is a self-proclaimed non-technical person who always uses the word “geeky” for something requiring deep technical skills. He is fond of working with people (mostly to drive them crazy :-P ), taking part in all sorts or projects and organizing events and activities. He’s one of the most active people I know. He barely sleeps (as he admits) and he’s always doing one thing and thinking of at least two others. As someone put it “Does he ever rests? I’ve only seen him walking.”. His huge reservoir of energy had led some to think his body is not carbon-based, but rather kerosene-based. Considering the astonishing number of projects he’s an active contributor to, that may not be far from the truth. His active nature and deep involvement turn him into a valuable, albeit highly unstable asset of a project. As proof of his desire to get involved, I have coined the following phrase: “Daniel is always asking me for help when he’s doing something. He’s always offering me his help when I’m doing something”.

Răzvan Rughiniș is the person I’m having the most similar and different opinions with. We’re always unconditionally agreeing on certain aspects and heavily disagreeing (mostly quarrelling actually) on others. We have similar visions and goals but different approaches to reach them (this turns out to be a good thing as we don’t clash even more). We do, however, make a very good team and manage to get a lot of things done. Mostly through conflict, rather than compromise, we manage to get to an agreement and rally a lot of resources in a given project or activity. As part of the same team, we manage to get a lot of things done and prove that “the whole is more than the sum of its parts”. With his access to a lot of resources, his good motivational skills and goal oriented nature, Răzvan is the one who can provide substantial help for achieving the most in a given amount of time. If there would ever be a “Dynamic Duo” competition, he would my team mate.

Cristian Săndescu is a highly proficient, goal-oriented individual. His professional portfolio is impressive as he earned certifications in networking, security, Windows administration, Linux administration and many others. One of his most impressive characteristics is his all-around knowledge base: networking, security, system administration, programming, marketing, consulting, training, delivering presentations. Just like Tavi, his sympathetic and helpful nature, rational approach, and non-patronizing answers make him one of the person to call upon when facing a problem. Cristi’s vast experience, knowledge, presentation skills and reasoned opinions make him a valuable partner for discussions of any kind. He’s the person I’m always fond of talking to on a variety of serious subjects (for non-serious subjects there’s Andrei Buhaiu).

The above descriptions are still opinions and are thus highly subjective. Yet these descriptions are the way I see those people and are having a positive influence on me.

Who are the people that you are proud to know and have a positive influence on you?

HTTP repository sharing asides Gitweb

November 7, 2009

Once you set up Gitweb for HTTP-based Git repository browsing you should also enable (read-only) repository cloning through HTTP. This can be easily done through the use of the AliasMatch directive in Apache.

Assuming a configuration mentioned in my previous post:

  • Apache2 and Gitweb are installed;
  • http://$DOMAIN_BASE/git is Gitweb’s URL,
  • Git repositories are stored in /var/cache/git/

the required steps are:

  1. Run git-update-server-info in the Git repository folder:

    razvan@swarm:~/git-repos/code.git$ git-update-server-info

    This will create the info/refs and objects/info/packs files required by “dumb servers” (as mentioned in the manual page for git-update-server-info).
  2. Add execution rights to the post-update hook:

    razvan@swarm:~/git-repos/code.git$ chmod a+x hooks/post-update

    This hook automatically runs the git-update-server-info at each push.
  3. Add a proper AliasMatch directive to the Apache2 configuration file, before the configuration lines for Gitweb, as shown below:

    AliasMatch ^/git(/.*\.git)(/.*)? /var/cache/git$1$2

    Alias /git /var/www/gitweb/
    <Directory /var/www/gitweb/>
    Options ExecCGI FollowSymLinks
    AddHandler cgi-script cgi
    DirectoryIndex gitweb.cgi

    RewriteEngine On
    RewriteRule ^/git$ /git/gitweb.cgi
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^/git/.* /git/gitweb.cgi/$0 [L,PT]
    </Directory>

After the above steps are accomplished, one would use the http://$DOMAIN_BASE/git/$REPO.git URL to enable read access to the /var/cache/git/$REPO.git repository:

razvan@valhalla:/tmp$ git clone http://swarm.cs.pub.ro/git/razvan-code.git
Initialized empty Git repository in /tmp/razvan-code/.git/
got 6a3abf757a56cfb3f736c0ebc8f923636151d9c9
walk 6a3abf757a56cfb3f736c0ebc8f923636151d9c9
got 0d60f24cf17c22722307f6163f4d4b2aeee99476
[...]

It would be also be nice for the URL to appear in the Gitweb interface. This can be accomplished by adding the @git_base_url_list directive to Gitweb’s configuration file (/etc/gitweb.conf):

swarm:/var/cache/git# tail -2 /etc/gitweb.conf
# git base URL
@git_base_url_list = ('http://swarm.cs.pub.ro/git');

Each Git repository entry in the Gitweb interface will now show a label pointing to the HTTP URL for the repository (as can be seen here).

At this point, you can use HTTP for read-only access to the Git repository. Write access is assumed to be accomplished by other means (SSH or others). If you would like write access through HTTP you would have to enable WebDAV support and configuration. JEDI speaks more on this.

Gitweb access to Git repositories

November 7, 2009

I’ve recently spent some time configuring Gitweb access to Git repositories. It took me a while to find out how it worked as the configuration interface has changed since its first release and older blog entries were mentioning it. At first there was a Perl configuration script (gitweb-config.pl) but nowadays the common way to configure Gitweb is through a simple configuration file (gitweb.conf).

For a typical Debian installation (apt-get install gitweb), all that is required is to create or link repositories in the default Debian Git repository root (/var/cache/git/) and add some lines to an Apache configuration file. The default configuration file for Gitweb (/etc/gitweb.conf) works out of the box. The first directive ($projectroot) points to the Git repository root. If you would like your Git repositories to reside somewhere else, just alter $projectroot:

# path to git projects ( .git)
$projectroot = "/var/cache/git";
[...]

Assuming you would want the http://$DOMAIN_BASE/git URL to enable the Gitweb interface, there are two steps you should do:

  1. Create the /var/www/gitweb/ folder and create symlinks for /usr/share/gitweb/git-favicon.png, /usr/share/gitweb/gitweb.css, /usr/share/gitweb/git-logo.png and /usr/lib/cgi-bin.cgi. You should end up with something like this:

    $ ls -l /var/www/gitweb/
    total 0
    lrwxrwxrwx 1 root root 33 2009-11-05 21:25 git-favicon.png -> /usr/share/gitweb/git-favicon.png
    lrwxrwxrwx 1 root root 30 2009-11-05 21:26 git-logo.png -> /usr/share/gitweb/git-logo.png
    lrwxrwxrwx 1 root root 27 2009-11-05 21:26 gitweb.cgi -> /usr/lib/cgi-bin/gitweb.cgi
    lrwxrwxrwx 1 root root 28 2009-11-05 21:26 gitweb.css -> /usr/share/gitweb/gitweb.css

  2. Add the following configuration line to a proper Apache configuration file (either a configuration file in /etc/apache2/conf.d/ or a site file in /etc/apache2/sites-enabled/):

    Alias /git /var/www/gitweb/
    <Directory /var/www/gitweb/>
    Options ExecCGI FollowSymLinks
    AddHandler cgi-script cgi
    DirectoryIndex gitweb.cgi

    RewriteEngine On
    RewriteRule ^/git$ /git/gitweb.cgi
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^/git/.* /git/gitweb.cgi/$0 [L,PT]
    </Directory>

All you have to do now is add Git repositories to the Git repository root (in my case /var/cache/git/). I prefer using symlinks as most Git repositories me and my friends are using are stored in our home folders:

swarm:~# cd /var/cache/git/
swarm:/var/cache/git# ln -sf /home/razvan/git-repos/code.git/ razvan-code.git
swarm:/var/cache/git# ls -l
total 0
lrwxrwxrwx 1 root root 32 Nov 7 12:37 razvan-code.git -> /home/razvan/git-repos/code.git/

In the end you’ll end up with a cool web interface (similar to this) to your (and your friends’) Git repositories to share with the world. Cool!

Installing and configuring Horde Groupware on Debian Lenny

August 7, 2009

Horde Groupware is a groupware application we are using in some of the projects and activities I’m involved in. I had used Horde IMP for some time, but it didn’t impress me much. All of that changed when I found out that Horde is really a groupware application offering more than a webmail client (IMP). It also offers a calendar application (kronolith), a contacts/address book application (turba), task list management (nag), a notes application (mnemo) and a built-in wiki (wicked).

Horde is written in PHP, has a clean code base, good support (wiki, mailing lists) and offers a lot of features and customization options. There are also a good number of modules that can extend its capabilities. All in all, Horde is a nice application and deals with with the burden of managing and coordinating a group of people and their activities.

The installation process is quite straightforward, though a bit complex. There are many configuration options allowing complex customization. I have written a tutorial[1] describing the installation and configuration process of Horde Webmail Groupware on Debian GNU/Linux 5.0 Lenny. It’s a source-based installation and it’s based on my experience of installing Horde Webmail Groupware for the ROSEdu community and the USO and RL courses. This tutorial has been written while installing a new instance of Horde (to make sure everything works as described).

I hope you find it useful and maybe give Horde a try. Comments are welcome!

For those looking for a package-based installation, Debian-wiki has a nice tutorial[2].

[1] http://swarm.cs.pub.ro/~razvan/dokuwiki/doku.php?id=tutorials:horde_groupware

[2] http://wiki.debian.org/Horde

From domain.com to www.domain.com in Apache

August 3, 2009

While redirecting from domain.com to www.domain.com is quite common, I hadn’t done it until the day before yesterday. I wanted to redirect all web access towards rosedu.org to www.rosedu.org. Apart from the cosmetic effect, the main reason was the configuration of a digital certificate for HTTPS access for the www.rosedu.org domain. As the certificate’s common name (CN) was www.rosedu.org a warning appeared when using HTTPS for the rosedu.org domain.

The initial configuration is quite basic: two virtual hosts, one for HTTP access (www.rosedu.org) and one for HTTPS access (www.rosedu.org-ssl), as shown below:

==> www.rosedu.org <==
<VirtualHost *:80>
ServerAdmin sergiu@rosedu.org
ServerName rosedu.org
ServerAlias www.rosedu.org

==> www.rosedu.org-ssl <==
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin sergiu@rosedu.org
ServerName rosedu.org
ServerAlias www.rosedu.org

A little browsing revealed the solution: the use of the almighty mod_rewrite in Apache. The rule needed only be applied to rosedu.org requests so I needed a condition for selecting that domain name. Quite easy to do, I ended up with the following configuration:

==> www.rosedu.org <==
# Redirect rosedu.org to www.rosedu.org
RewriteEngine On
RewriteCond %{HTTP_HOST} ^rosedu.org$
RewriteRule (.*) http://www.rosedu.org$1 [R=permanent,L]

==> www.rosedu.org-ssl <==
# Redirect rosedu.org to www.rosedu.org
RewriteEngine On
RewriteCond %{HTTP_HOST} ^rosedu.org$
RewriteRule (.*) https://www.rosedu.org$1 [R=permanent,L]

The %{HTTP_HOST} directive allows selection of the hostname (using ^ (begin) and $ (end) regular expression symbols). The request URL ($1) is added to the new domain name (www.rosedu.org).

If you want to redirect requests towards www.rosedu.org to rosedu.org, you would just have to substitute the domains in the above configuration.

As I wanted to use an easy'n'sneaky way out, I had made a mistake trying to use the Redirect directive from mod_alias:

Redirect permanent / http://www.rosedu.org

However, when accessing http://rosedu.org, the URL transformation did take place (the browser now showed http://www.rosedu.org in its location bar), but the web server greeted me with an error message: This page cannot load because of a problem with the Web site. Accessing the logs showed a large number of redirect messages ("GET / HTTP/1.1" 301 229 ") revealing the problem: the web server was now recursively redirecting http://www.rosedu.org to the same URL. This happened because the virtual host was responsible both for the rosedu.org domain (the ServerName directive) and www.rosedu.org domain (the ServerAlias directive). Oh well, live and learn!

One extra thing I found out is the possibility of selecting HTTPS or non-HTTPS traffic through the use of the %{HTTPS} variable or the %{SERVER_PORT} variable (assuming HTTPS uses 443):

RewriteCond %{HTTPS} !on
RewriteCond %{SERVER_PORT} !^443$

Besides the official Apache documentation for mod_rewrite, the mod_rewrite Variables Cheatsheet is a valuable resource.

Collaborative and project management software

August 2, 2009

I have spent the last few days toying with various pieces and types of web collaboration software: installing, configuring, using, testing. I have used quite a few in the last year and I will probably be using more of them in the near future.

As most projects and activities are nowadays developed by groups or teams, it is usually quite important to have access to good collaborative software. I am myself involved in diverse projects and I am constantly on the lookout for an adequate application. While on the lookout, I realized the diversity of the tools and applications one can use for collaborative work, group management, software management and project management. Each type addresses a specific need and it takes practice and some trial and error to find a suitable one.

I shall give a brief description of each type of such software. The classification is not perfect. Some features are common among different classes and some pieces of software are difficult to position in the classification. I will be mostly referring to web-based software as it is the main form of collaboration and team/group interaction.

I have divided the tools into two sets: simple tools created for a specific task (do on thing, do one thing well) and complex tools that integrate a subset of the former in a common interface.

Simple tools

While not really collaborative tools, forums and mailing lists are the basic form of communication inside a team/group. Forums are usually used for question/answer sessions (similar to Usenet and IRC channels), while mailing lists are “more collaborative” as they are usually used inside of a project for discussions on ideas, proposals and other issues. Forums are better at classifying discussions while mailing lists allow easy integration with an e-mail client and relieve the “burden” of accessing and logging into a web site.

The simplest and yet quite powerful tools for collaboration are wikis. Wikis are successfully used for storing and sharing information and knowledge. Major uses of wikis are:

Wikis are successfully used as content management systems (CMS) as they are simple to install/configure and allow easy editing. The ease of editing, modification, updating make wikis one of the most powerful form of collaboration. Most other collaborative tools usually integrate wikis or wiki-like features. Popular wikis are MediaWiki, DokuWiki, TWiki, MoinMoinWiki.

Somewhat related to wikis, Google Docs are a very good form of collaboration. Google Docs allow collaborative editing of documents, spreadsheets and presentations. I am usually using Google Docs over wikis when:

  • the object of the document is quite specific that it doesn’t make sense to create a wiki page (or a wiki instance altogether);
  • you don’t want to share it with the whole world; Google Docs invitation-based sharing is very fast and intuitive;
  • you want to later export the document in an offline editable format (.doc, .odt) and need the features of document editing (headers, formatting, bullets, etc.);
  • you want to enable simultaneous collaborative editing (wikis usually lock the page or section you are editing) and communications (through the integrated document chat sidebar).

Software projects couldn’t exist without the use of source code management (SCM) tools / version control software (VCS). They allow easy interaction between team members when working on the same software project. Common concepts are: repository, checkout, commit, local copy, revision, merging. Inspired by the advantages of SCMs, other tools (such as wikis or word processors) are using integrated revision control. Examples include Subversion, Git, Bazaar, Mercurial.

Bug trackers, issue trackers, task/todo schedulers and calendars are also forms of collaboration. I will not insist on the subject as they are usually integrated in collaborative software applications. Bug/issue trackers are used by software developers and users to report bug or request features. Task/todo schedulers and calendars are used for planning activities (tasks, ownership, timeline, priority) within a project; they may also be used for personal planning.

Integrated applications

What follows are classes of software that integrate some of the above tools. The classification is not perfect as some features blend in two or more classes. These applications are more complex and, worse, harder to chosse from. It is difficult to match your needs on top of a certain tool or choose the one that delivers all you want in the easiest way. Hopefully, the description here would help you in the process.

The “least-featured” class of integrated applications is the (web-based) software project management tools class. These applications are suitable for small to medium size teams of developers. They usually integrate wikis, VCSs (browser view) and bug/issue trackers. Todo/tasks schedulers can be integrated as plugins but their functionality is quite limited. Calendar features are enabled through the use of milestones. The best examples of such tools are Trac and Redmine. Redmine also offers project management facilities (activities, Gantt charts), while Trac can be easily extended through the use of plugins.

The “level-up” class in matter of software project management are software forges. Common existing examples are SourceForge, GNU Savannah, Google code, BerliOS. A software forge allows hosting of multiple projects and will usually be used by a great number of people when compared to software project management tools. They usually offer little traditional project management features, but generally integrate forums/mailing lists and software archive download services. User-deployable software forges are Indefero, FusionForge and Savane.

While the previous two classes are concerned with the software side of a project, the next two classes deal with the human/team and project activities aspects. The first class are groupware systems. Groupware systems are usually aimed for small and medium sized teams/groups. They integrate a webmail interface, task/todo schedulers, calendars, address books/contacts, group management and categories and sometimes even a wiki. Groupware systems need not be used by software development teams only. They can be used by groups requiring integrated features for collaboration. Some groupware systems may include further features such as bookmark management, a file manager or a document management system. Examples include eGroupWare, phpGroupWare, Kolab, Horde Groupware.

The “motherload” of collaborative tools are project management applications. I am not talking about Microsoft Project or similar desktop applications, but rather about web-based collaboration oriented applications. The separation line between groupware and project management applications is quite thin. eGroupWare can be easily tagged as project management software. Project management applications are usually aimed at large teams working in complex environments (usually companies). They include document management systems, time tracking, resource management and knowledge base interfaces. They are mostly commercial products, such as Assembla, Microsoft Office Project Server. eGroupWare and Project.net are free/open-source alternatives.

As one can see, there are many kinds of collaborative software. The thin separation line between these classes only makes it more difficult to choose the one that fits your needs. I will come up with some comparisons and some suggested usage scenarios in a later article.

About me and this blog

August 2, 2009

Hello!

My name is Răzvan Deaconescu. I am Teaching Assistant and PhD student at University Politehnica of Bucharest, in the Computer Science Department. I am also a member of the ROSEdu community and the Stagii pe Bune initiative.

I am passionate about computers and technology and this blog is meant to help me share my knowledge about these subjects. My fields of interest include operating systems, networking, system programming, system administration and free/open-source software and communities.

I believe that knowledge sharing, communication and collaboration are keys to successful activities. I am striving to learn as much as I can from the others and give as much back. Hopefully the posts in this blog will be found useful and help spread both old and new information and skills. Comments are welcome!

That’s it for now! Back to work!

 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org