15 Useful Project Management Tools

November 14, 2008

by Cameron Chapman

There is a huge variety of project management applications out there. Most are general purpose apps, not aimed at any one industry. But there is a growing number of project management apps aimed specifically at one industry or another. Applications geared to creative types are becoming more readily available, and some of the offerings are really quite good.

Many of these project management apps have built-in code repositories and subversion browsers (or are built around them). A few have built-in bug and issue tracking. Others include more than just basic project management. All of them can help you keep track of activities and team members. There are both free and paid options. Some have very slick interfaces, and some are modeled more after desktop applications. All are relatively easy to use and easy to set up.

Below are 15 useful project management applications, almost all of which are targeted directly at Web developers, designers (both Web and print) and other creative types. The last one is not geared specifically to creative types but is the most unique project management application I’ve found and is included on that basis as well as because of its potential usefulness for designers and developers.

Also consider our previous article:

1. Basic Project Management Apps

These applications are marketed specifically for project management. Most include things like task-, team-, and goal-management features. Some include additional features such as time tracking and invoicing.


Lighthouse is a bug- and issue-tracking app that tracks timelines and milestones, integrates with your email client and more. You can update tickets through your inbox, manage your beta testing (by making tickets and milestones public), integrate it with subversion and manage and prioritize your tickets.

Project creation is simple; only a project title and description is required. Once a project is created, tickets, messages and milestones can be entered. Ticket creation can be done by email (the email address to send tickets to is displayed on the “Tickets” page). You can show tickets based on a variety of criteria, including date, state (open or closed) and who is responsible for them. Message creation is easier than email, and you can attach files up to 50 MB in size. When you create a milestone you simply enter the title, the date it’s due and the goals or focus for that particular milestone. It doesn’t get much simpler than that.

Permissions are easy to set, and you can invite users by email. One of the best features of Lighthouse is its Beacon and API integration. With the API, you can customize tickets, projects, changesets, milestones, messages and more. Integrate it with other services (such as Google Calendar), or make desktop applications that use Lighthouse. The APIs make Lighthouse infinitely more useful, because you can really customize it to fit your current workflow.

Lighthouse is great for Web development teams (or individuals) and has a very easy-to-use interface. They have paid and free plans, all of which include unlimited open-source projects. The free plan lets you manage one private project with up to two people on the account. The paid plans range from $10 per month for the Personal plan (with up to 3 projects, 10 users and 100 MB of file upload storage space) to $120 per month for the Platinum plan (with unlimited projects, up to 50 public projects, unlimited users and 30 GB of file upload space).

When combined with a subversion app, Lighthouse provides a pretty complete project management app for developers. Subversion integration is pretty straightforward, and the help file provided gives complete step-by-step instructions for setup.


Rockin’ RSS with PHP on your HTML

October 2, 2008

An RSS feed lets webmasters tease visitors into returning to their websites again and again to check out new content. Danny Wall explains how to set up this simple, automated, spamless way of getting Web surfers to come back for more.

While you may have a good grasp of RSS and what it is, stick with me for just a second and after we run over some preliminary stuff, we’ll move into creating an RSS feed of your own, for your website, using PHP.

RSS (which stands for Really Simple Syndication) is, at its core, a push technology that was developed by Netscape. It gives webmasters the ability to do two things: the first is to easily add content from other websites to their own, and it also easily allows webmasters to push their own unique content out to other people and other websites.

The use that will probably be the most exciting to you is that people who are sick and tired of the mountain of spam filling their inboxes, and tired of having to surf to dozens of sites to get the information they want, are turning to RSS–or more specifically an RSS reader, to obtain news and information on the latest updates to the blogs they follow. An RSS reader (such as the one that can be found at http://www.pluck.com) allows people to see all of the sites they follow in one convenient place and quickly and easily see if there’s anything new–and even what is new.

You can almost think of it as turning the Web into an email application, but without all the spam–because it lets you see which sites have new information in almost the exact same way you know if you’ve read an email or not.

This means that you can add new content to your site, and all of your visitors will know the content has been added and will know what was added. It also means that your own site content can be syndicated across the Web, driving traffic from a huge number of sites directly into your own.

An idea that’s catching on

This concept is so powerful that it is now being picked up and used by the largest players in the Internet news space such as Yahoo!News. It is also used by many blogging services such as Google’s recently acquired Blogger (actually, it uses Atom, but it is essentially the same thing) to keep their loyal readers up to date with new additions to the blogs.

In other words, the format is growing in leaps and bounds, driven not only by the biggest sites on the Web, but also by the cultural wildfire known as the blogosphere.

In the old days, when a Web site had a new update they wanted people to know about, it meant sending out an email, or using an email newsletter. The problem is that in today’s day and age, with many people getting hundreds of spam messages a day, people are block deleting much of their email–including messages they actually asked to receive.

Now, with RSS, it is possible to simply update your website, and the RSS readers that people have installed will automatically tell them an update has happened, what the update was, and give them the ability to quickly and easily surf to your site. No more email, no more worrying if the email you sent even reached the person.

Further, all of that doesn’t even count the ability for other webmasters to add your content to their site with no muss and no fuss (again, syndicating your content across the web).

How–and why–to get started

You should know that there are a lot of tutorials and the like on how to add RSS content to your own site. An excellent one can be found at: http://www.devshed.com/c/a/PHP/Plugging-RDF-Content-Into-Your-Web-Site-With-PHP.

Additionally, there are a wide range of tools to make adding RSS to your site easy with hardly writing any code of you own. I personally use the MagpieRSS toolset created in PHP which can be found at http://magpierss.sourceforge.net. So instead of covering how to get RSS added to your site, what I’d like to do is talk about how you can build your own RSS feed.

Some webmasters that I know groan over the thought of RSS. It’s yet another new technology to learn, another new thing to add to their site and manage. The thing is, RSS is really nothing more than an XML application, and if done right, it doesn’t need any management. Everything can be (indeed, should be) automated.

In fact, RSS it is the first widespread use of XML. It is the first time XML is being used to do something useful for the average Web surfer AND for the average webmaster.

To start with, the easiest thing to do will be to take a look at what an RSS file looks like. You can see an example RSS file at: http://www.wolfdatasystems.com/rss.xml

To anyone with any knowledge of HTML it isn’t really hard to figure out what is going on. There isn’t anything strange or scary, there isn’t anything to make you cringe.

Starting with the header

In fact, using the magic bag of tricks known as PHP, your own RSS file can be automatically created with very little effort, and once the PHP script is finished, the whole thing is “maintenance/management free.”

To provide a little further clarification, we’re going to cover the basics of RSS file creation (indeed, the example file I gave you above is only a basic RSS document). In future articles we’ll talk about other elements to the RSS specification, what they mean, and why you might want to use them (and I’ll provide you the additions to the PHP script you’ll get in this article to add those elements).

For nearly every website, some of the information in the RSS file–lets call it the “header” info–will be the same/static each time the file is created. That info is:

<?xml version=’1.0′ ?>
<rss version=’2.0′>
<title>Wolf Data News</title>
<description>News for programmers, business, and home computer users.</description>

As you can see, this amounts to the very first group of information in the file; and obviously you’ll want your own titles, your own links, and your own “feed description,” but the above will almost certainly be static information in your feed. Every day when my site updates the RSS file, this information is unchanged.

Now, lets go into building the PHP script to create the RSS file. For the sake of discussion, lets call this file create_rss.php:

// open a file pointer to an RSS file
$fp = fopen (“rss.xml”, “w”);

// Now write the header information
fwrite ($fp, “<?xml version=’1.0′ ?><rss version=’2.0′><channel>”);

fwrite ($fp, “<title>Wolf Data News</title>”);

fwrite ($fp, “<link>http://www.wolfdatasystems.com/</link>&#8221;);

fwrite ($fp, “<description>News for programmers, business, and home computer users.</description>”);

fwrite ($fp, “<language>en-us</language>”);

fwrite ($fp, “<docs>http://www.wolfdatasystems.com/rss.xml</docs>&#8221;);

So far, we haven’t done anything too challenging. All we’ve done is opened a file, and written the header information that won’t be changing from file creation to file creation.

As you can see, I have broken the header file writes into several pieces. I’ve done this simply to make the script easier to see instead of having stuff trailing off to the right side of notepad forever. It isn’t at all necessary, but I do recommend it simply to make it easier to modify the file in the future.

Adding content

At this point, you now need to begin adding the “item” level information; which is simply the content that has been added to your site. Before we get started on this, there are some things you need to know.

Generally, an RSS feed contains not only the most recently added content to your site, but quite a bit of “back” content as well. This is to allow any new users to not only see the most recent additions, but also see what has been done before they picked up your feed. This way, they’ll easily be able to look at that as well.

It’s a good thing for the new user, and for you, as often a person that picks up a new feed will spend some time checking out a lot of the “past” content and catching up on what you’ve got going.

That means we need to do two things.

First, you need to database your new content. In otherwords, you should be adding new content to your database, and your website should be pulling that new content out of the database. This will allow you to utilize PHP with maximum benefit and speed to build the RSS file.

$db = mysql_connect(“localhost”,”your_db_uid”,”your_db_pw”);
$content_sql = “select * from content where page=’index’ order by id desc”;

Obviously in the above line, you are seeing how I do it. Your query may be different depending on how you are databasing your content.

$content_result = mysql_query($content_sql);

So far, we’re still in the “basic” neck of the woods. In fact, all we need to do now is pull the content out of your site and put it into the RSS file.

while ($content_rec = mysql_fetch_row($content_result)) {
fwrite ($pd, “<item>”);

$headline = $content_rec[0];
$content_1 = substr($content_rec[1], 0, 250);
$content = strip_tags($content_1);
if (strlen($content_rec[1]) > 250) {
$content = $content . “….”;
fwrite ($fp, “<title>$headline</title>”);
fwrite ($fp, “<description>$content</description>”);
$item_link = “http://www.wolfdatasystems.com/index.php?d=$content_rec%5B3%5D&#8221;;
fwrite ($fp, “<link>$item_link</link>”);

fwrite ($fp, “</item>”);

Tease the reader

And essentially that’s it. Notice how I did NOT put the entire content into the RSS feed. You can put the entire content into the file if you want. Personally, I don’t recommend doing this. Instead, put just enough to tease the reader so that they want to visit your site.

Now, you will note that I do move the data around just a bit to not only shorten the length of what I’m sending out on the feed, but also to add the ellipses to let readers know there is more.

And again, how you decide to database your content will affect exactly how you pull that content out.

Anyway, at this point, all we need to do is close off the file.

fwrite ($fd, “</channel></rss>”);
fclose ($fd);


It is a simple enough process. You can now have that ran by a cron job, or simply run the php file from a browser once a day.

Again, if you are running some sort of a content management system (and I’ll talk about how to easily build your own in future articles), creating the RSS file is obviously a simple matter of writing the static “header” information for your site/feed, pulling the content out of the database, writing each item of new content between “<item>” tags, and then closing the file off with the ending tags.

You may want to add in some other information into this feed, and again, we’ll also talk about what other information there is to add, and why you may want to put that into the feed. We’ll also talk about, if you are adding content via RSS feeds to your site, how to make THAT content from that OTHER feed a part of your own RSS feed. This will ensure that you’ve got a constantly updating RSS feed so that people will want to keep coming back to your site, driving up traffic, unique visitors per day, and page views per visitor.

Source: http://www.devshed.com/c/a/PHP/Rockin-RSS-with-PHP-on-your-HTML/

Change localhost to Your Own Domain

October 2, 2008

If you ever thought to change localhost to yourdomain.com, then everything you need is just by following this steps:

  1. Edit C:/WINDOWS/system32/drivers/etc/host
  2. Add your wishes: localhost yourdomain.com

  3. Edit C:/Program Files/xampp/apache/conf/extra/httpd-vhosts.conf
  4. Add these to the last lines:

    NameVirtualHost localhost:80
    <VirtualHost localhost:80>
    DocumentRoot e:/xampp/htdocs
    ServerName localhost

    NameVirtualHost yourdomain.com:80
    <VirtualHost yourdomain.com:80>
    DocumentRoot e:/xampp/htdocs/yourdomain
    ServerName yourdomain.com

  5. Restart your Apache.
  6. Now try to browse http://yourdomain.com

Good luck 😉

PHP RSS Parser

October 2, 2008

PHP RSS Parsers are what many PHP developers looking for these days as every web application or website has some RSS input or output.

RSS parsers make the use of RSS simpler as they have overcame the known RSS parsing difficulties.

WebResourcesDepot have collected the most popular free RSS Parsers coded with PHP:


SimplePie is a PHP code library that makes it very easy to use RSS & Atom feeds. SimplePie is fast and standards compliant as it supports:

  • RSS 0.90
  • RSS 0.91 (Netscape)
  • RSS 0.91 (Userland)
  • RSS 0.92
  • RSS 1.0
  • RSS 2.0
  • Atom 0.3
  • Atom 1.0

This PHP RSS parser class has also plugins for favorite web services.


lastRSS is also a simple yet powerful PHP class for parsing RSS feeds.

  • All RSS versions supported (0.9, 1.0 and 2.0)
  • Transparent cache (doesn’t cache RSS file directly, neither HTML output, but serialized variable; cached data isn’t parsed every time, but you can still access individual fields)
  • pubDate/lastBuildDate conversion to any date/time format
  • Character encoding conversion (all encodings supported by iconv library)
  • Returns an associative array with RSS fields
  • Regullar expression parsing (very quick)
  • Strips HTML from description (both hard-coded and entity-coded)
  • Optional limit the number of returned items
  • Two ways how to proceed CDATA information (get/strip CDATA content)

This PHP RSS parser class also supports well known feed formats like RSS 1.0, RSS 2.0 & Atom.

  • Easy to use
  • Parses most RSS formats
  • Integrated Object Cache
  • HTTP Conditional GETs
  • Configurable
  • Modular


Zend_Feed provides functionality for consuming RSS and Atom feeds. It provides a natural syntax for accessing elements of feeds, feed attributes, and entry attributes. Zend_Feed also has extensive support for modifying feed and entry structure with the same natural syntax, and turning the result back into XML. In the future, this modification support could provide support for the Atom Publishing Protocol.

How to show custom web status picture of Yahoo Messenger

September 30, 2008

Online presence allows people to see if you are currently online and using Yahoo! Messenger. To add online presence, you simply need to add some HTML to your web page.
If a Yahoo! Messenger user clicks your online presence, an instant message window will open for them so they can type you an instant message.

Prepare this code:

<a href="ymsgr:sendIM?frozenade">
<img border=0 src="http://opi.yahoo.com/online?u=
frozenade&amp;m=g&amp;t=1" /></a>

Please notice for bold text above. Then change to yours.

For t=1, you can change the value according these pictures:

To see the result, just take a look at right of this page. 😉

Good luck!

Prevent and Remove Microsoft Outlook Duplicates

August 22, 2008

This page contains answers to common problems about Microsoft Outlook duplicates, where they come from, and how to avoid them. All of the information contained pertains to Microsoft Outlook, not Outlook Express. To find out more, including the differences between Outlook and Outlook Express and how to find out which one you use, see our general FAQ.

This page is broken up into two parts, how to prevent the duplicates from occurring in the first place and how to clean up the duplicates.


Many things cause duplicates to appear, including synchronization with Palms, Blackberrys, or Pocket PC PDAs, restoring Exchange public folders from backups, using Netfolders, incorrect Outlook rules and many other reasons. Preventing them from occurring in the future is the first step to eradicating them.

1. How to stop receiving duplicate email messages
2. How to prevent sending duplicate email messages
3. How to prevent seeing duplicate names when viewing the “Select Names” window after clicking “To:”
4. How to prevent duplicate appointments


Removal is the second step to eradicating the duplicates. Once you are sure that no more duplicates will be created, you can use these methods to clean up the duplicates.

1. How to remove Outlook duplicates, including email, contacts, appointments, and tasks
2. How to remove duplicate Outlook Today and Personal Folders
3. How to remove duplicate Outlook address book entries
4. How to remove duplicate holidays
5. How to remove duplicates due to Netfolders

1. How to stop receiving duplicate email messages

There are a few things you can check to stop duplicate email messages.

Start by checking Rules to be sure that copies are not being made to the Inbox, and make sure that all your rules end in “Stop Processing” actions.

Then check the task manager to be sure that there is only one instace of Outlook running. Two instances of outlook.exe running can produce two messages arriving at the same time. You will need to then determine why two instances of Outlook were running in the first place.

Another thing you can do is to delete/remove ALL your e-mail accounts and recreate them. This worked for some people.

Also, if your running Outlook XP, be sure that you are at service pack 2 or later. You can tell if you need to upgrade at Microsoft Product Updates.

Finally, another person had this happen when he had two e-mail accounts set up – using two e-mail addresses, but the same POP3 incoming and same SMTP outgoing. What happened is that the second account was getting the e-mails from the POP3 server before they were actually deleted after the first account was finished. If this is the problem you can disable the receive on the second account. There is a Microsoft article explaining the problem more thoroughly at http://support.microsoft.com/?kbid=284404.

2. How to prevent sending duplicate email messages

Sending multiple email messages can be the result of Norton Anti-Virus and Outlook combined. Apparently when Norton scans outgoing emails it may send it out twice. The quick fix is to change the Norton properties to not scan outgoing messages, but you may want to consult the Symantec Knowledge Base about your software.
3. How to prevent seeing duplicate names when viewing the “Select Names” window after clicking “To:”

What you may be seeing is an entry for an email address and one for business fax numbers. This is because Outlook considers fax numbers as “valid transport addresses”. You can prevent these duplicate names from appearing by prepending “Fax:” before the number in the contact. This has the effect of preventing Outlook from seeing the fax number as a valid transport address, so you only get one name (the email address). This technique is useful…

[Editor’s note: Shameless self promotion warning]
…if you have too many contacts to process, and you can either export them all to Excel, change the numbers, then import them back, or you can use our Hide Fax Numbers add-in to process them all. The add-in has recently been updated to automatically process the fax numbers in contacts as you add them.

In addition, there may be other solutions that exist. See the Resources page for more information about these solutions.

4. How to prevent duplicate appointments

Check to see if you have more than one Outlook running. Having more than one Outlook process running while synchronizing can lead to duplicate appointments. To see if you have more than one running, quit Outlook, open the Task Manager and go to the processes tab. Once there, click once on the “Name” column to sort alphabetically, then look for “Outlook.exe”. If it’s listed there, then highlight it and click on “End Process”. Some people report finding up to four copies of Outlook running using this method. You should be able to resume your synchronization after performing this step.

Duplicate appointments can also be created by accepting a meeting request in Outlook Web Access. See the Microsoft knowledge base article titled “A duplicate appointment item is created when a user accepts a meeting request in Outlook Web Access” for more information about this.

1. How to remove Outlook duplicates, including email, contacts, appointments, and tasks
If you have just a few duplicates, it may be easiest to manually remove them. For emails, this is no problem but for any other Outlook item it is easiest to view the items in a table view, then select the duplicates, then delete them.

To accomplish this, go to View…By Category (or “By” anything really). This gets the view into a mode you can work with. Click either names or subjects (or any shown field) in the column header (in the gray area) to gather similar items together. You can then delete all the duplicates you find.

[Editor’s note: Another shameless self promotion warning]
Sperry Software offers 8 different Outlook duplicate eliminators, including a bundle package comprising all 8 for one price. We are aware of cheaper and sometimes free solutions to resolve duplicates (see the Resources page). However, it is our hope that you will support us by purchasing our products so that we can continue to maintain useful pages like this one.

2. How to remove duplicate Outlook Today and Personal Folders

There are three things you can try:

1) Right click on the folder and select “Close”.

2) Close Outlook, then right click Outlook Icon on the desktop. Select Properties, select Data Files. Remove the links to the backup .pst file.

3) Under the folder named HKEY_CURRENT_USER\Software\Microsoft\Windows Messaging Subsystem\Profiles\Microsoft Outlook Internet Settings you will have a series of folders with long hexadecimal numbers. Two of the folder will point to your *.pst file. You will next to export one of them (Registry | Export registry) and then delete the exported hexadecimal folder. Start Outlook, if it is fubar. Close outlook and import the registry file you just exported. Export the other hexadecimal folder and delete it. Start Outlook again.

If this is too scary, you can do this.

1) Export the folder named HKEY_CURRENT_USER\Software\Microsoft\Windows Messaging Subsystem\Profiles\Microsoft Outlook Internet Settings

2) Delete the folder named HKEY_CURRENT_USER\Software\Microsoft\Windows Messaging Subsystem\Profiles\Microsoft Outlook Internet Settings

3) Go to the folder named HKEY_CURRENT_USER\Software\Microsoft\Windows Messaging Subsystem\Profiles\

4) On the right, delete the value named: (Default Profile) “Microsoft Outlook Internet Settings”

Now you can start Outlook. Outlook will start like it is in a first run condition and you will have to open your old *.pst file via a File | Open | Personal Folders. Select View | Folder List. Right click on Personal Folders (the one that doesn’t have Outlook Today next to it) and select properties. Near the bottom is a checkbox to have mail delivered to this set of folders, check it. Restart Outlook and you’re all set.

In addition, see this Microsoft Knowledge Base article “OL2000: Duplicates of Outlook Today and the Folder List Appear in Outlook”

3. How to remove duplicate Outlook address book entries

In Tools…Addressbook you may have to pick from a list that looks like this:

Outlook Address Book

Where only the last one has any contacts.

The way to remove this condition is to go to Tools…Email Accounts…Directories…View or Change. Select your Outlook Address Book service, then change. On the next page, delete the first 3 contacts folders that appear. Close and restart Outlook and they should be gone.

4. How to remove duplicate holidays

Highlight the calendar, go to View…By Category and look at the Holiday category, then manually select and delete the duplicates.

This Microsoft Knowledge Base article may also help: How to Add and Delete Holidays in the Calendar.

5. How to remove duplicates due to Netfolders

Netfolders has been known to cause bugs and the feature has been taken out of Microsoft Outlook 2002. The only suggestion received so far has been to try deleting the net folders share and recreating it.
More Information From Microsoft

How to Clean Up Duplicate References to the Same .pst File
Multiple Personal Address Book Imports Cause Duplicates
Importing a Personal Distribution List from PAB May Cause Duplicate Contacts

Sperry Software would like to thank these Outlook MVPs without whom this page would not exist. In case you don’t know, MVPs are volunteers that spend time on various newsgroups, forums and web sites donating their time and knowledge to helping people overcome their difficulties with Outlook.

There are many kinds of MVPs, and the official MVP web site has more information, and many MVPs have their FAQs stored at http://www.mvps.org.

  • Vince Averello
  • Jocelyn Fiorello
  • Sue Mosher
  • Diane Poremsky
  • Ken Slovak
  • Milly Staples
  • Russ Valentine

Source: http://www.sperrysoftware.com/Outlook/Outlook-Duplicates.asp

Move Over, AJAX, ARAX Is Here

June 7, 2008

At the RailsConf conference for Ruby on Rails developers in Portland, Ore., on May 30, John Lam, creator of the IronRuby project at Microsoft, told eWEEK that as Microsoft’s Silverlight rich Internet application environment takes off it will provide Ruby developers with a way to deliver AJAX (Asynchronous JavaScript and XML)-style applications without having to use JavaScript.

“If you’re a Ruby programmer and you like Ruby as a language, context-switching into JavaScript is just something you have to do,” Lam said. “It’s a tax. You’re trading productivity away arbitrarily because that’s just what runs in the browser. And it’s much more interesting when you can run the same language on both sides [the client and the server] so you don’t have to do that context switch.”

In essence, using ARAX, Ruby developers would not have to go through the machinations of using something like the RJS (Ruby JavaScript) utility, where they write Ruby code and RJS generates JavaScript code to run on the client, Lam said. “Sure, you could do it that way, but then at some point you might have to add some JavaScript code that adds some custom functionality on the client yourself,” he said. “So there’s always that sense of, ‘Now I’m in another world. And wouldn’t it be nice if I have this utility class I wrote in Ruby…’ Today if I want to use it in the browser I have to port it to JavaScript. Now I can just run it in the browser.”