14 of 16 people think this post adds to the discussion. Do you?

HelpfulLinks_GlobeDolls.JPGIn a presentation at Web 2.0 New York, Scott Porad of Pet Holdings talked about user-generated content (UGC) and how anybody creating content needs to be thinking about UGC's impact.

Porad mentioned that filtering is the key to implementing successful user-generated content. Submissions on his sites are reviewed by a team of 15 or so initial "web-cultured" reviewers. Then they go into a secondary review area where site members then make the final call. One click by readers and the post goes back to the initial reviewers. Two percent of submissions are filtered out completely.

These voting mechanisms on content also act as a reward and encourage more participation when users know their submissions are appreciated.

Another notable point in Porad's talk was the Amazon "did you find this review useful" feature. Amazon has this type of question on each review in their customer feedback section. I recently read a review on Amazon that stated:

This product will stop working after a year unless you pay them a $20 annual fee. Need more than 2GB of storage? Another 2GB costs you $10 a year. There are other products that record to your computer's hard drive, and can even upload the captured images or video to the FTP site of your choice (most ISPs give you several GB for free). This product is just a bad idea, in my opinion.
Reading this and then seeing that 14 out of 16 people found it useful adds context to the products description and instills trust amongst customers.

This review stood out and helped me make a definite decision. User-generated content combined with good filtering adds an invaluable tool and resource to any site.



Labels: , , ,

Web 3.0 - The semantic web - It all makes sense now

rdfa.jpgThere has been a lot of talk about Microformats, RDFa (Resource Description Framework - in - attributes) and Web Ontology Language (OWL). These naming conventions, although not widely used yet, present a solution that narrows down relevant search results and data correlation on websites.

As some of you may know, our favorite web pioneer has recently announced Google Search Options.

This refined view of data exploits semantic markup conventions making it easy for people to find the data they want. They also have some good documentation on structured data in their Webmasters guidelines section.

So far, it seems like the three most common implementations for rich snippets are reviews, people and products. When coding, property association for data can be added either by naming the element class or adding a property attribute. These two Firefox addons, Operator and Semantic Radar, will display this information.

Here is the recording from the webinar we attended today on the Semantic Web.



Labels: , , , ,

Change on the internet happens faster than you think.

twitter-icon-300x300 (1).jpgAs an avid fan of new (well maintained) web based software, I've noticed a common attribute: it changes often, and it changes fast. Yesterday, Alex and I were testing a twitter application we created. He was certain that his followers were not seeing his replies to other followers and I was certain that they could. It turns out that I had enabled a setting in twitter to allow me to see them. We discovered that 98% of users did not have this enabled. This did not fare well for our application. It was back to the drawing board.

To our surprise, and not even a day after, we received news that twitter had removed that setting completely, and in favor of our application!

If you find yourself wishing that a software feature was different, try again soon, it may just be there next time.



Labels:

Save Time Launching Programs By Using A Launcher, Quick Launch Or The Superbar

Trying to find a program to launch by browsing through the list of programs can be time-consuming, especially if you juggle applications throughout the day. My first suggestion to overcome this is to drag the program on to your quick launch or dock. Your program is now one click away and will save you time next time you have to launch it.

quicklaunch.jpg

Another method for quickly launching an application is to use a launcher such as Launchy (xp) or Spotlight (Mac). These save you even more time by eliminating the search for the icon on your dock or taskbar as you launch the program by typing instead of clicking.

amarok.png

The third approach is to use the superbar (windows 7). The well thought out new taskbar is very time-saving. You can open an application once, pin it on the superbar and it will always be there when you need it. If it is not open, it opens when you click it, if it is open it goes to the window. It is very intuitive and streamlines the computer use process.

clip_image004_thumb.jpg

Methods like these help trim off time during development, leaving more time to focus on writing code.



Labels: , , ,

An Idea Is Born, And Kept Alive.

nurture375_7i59.jpg

Like a newborn baby, an idea is sensitive and needs special care. If you are not careful, you can actually kill an idea. On the other hand, if you nurture an idea, you can see it from conception to incubation to realization and application.

Here are some links to guide you through the nurturing process that can help you give constructive feedback.

  1. Ways to kill and ways to help an idea: A good list of what to say and what not to say.
  2. How to kill an idea, or help it grow: More suggestions.
If you have any other tips on helping an idea succeed, please share them with us.

Labels: , , ,

Reuse Code And Write Reusable Code

reuse-code.jpgBefore I set out to write a significant amount of code, I search high and low to make sure someone else hasn't already written it.

There are a few ways to do this:
1. Google Code Search
2. Look in your other projects for similar code.
3. Ask around (co-workers, twitter, IRC etc..).

One main reason for code reuse is that it will usually have less bugs than writing it from scratch. It is also evident that reusing code will save time. For example, why write a user authentication system when you can just download one and install it as a plugin. A few hours of research can save hundreds of hours programming. Another advantage to using pre-existing code is that it is usually more abstract and can fit a wider variety of applications. As a bonus, it usually has more features.

When you do have to write code because the problem you are solving requires more customization than anything out of the box, it is best to make sure it is reusable. For example, avoid naming your variables too specific, such as the_yellow_square_at_the_left_of_the_page, instead, create a function similar to shape('yellow', 'square', 'left'). This will allow you to reuse it for many situations. If you wanted a purple triangle on the right you would just write shape('purple', 'triangle', 'right'). It's much easier to refactor and reuse on future projects.



Labels: , , ,

Django-svn-revision: A Django pluggable App To Display Revisions In Views

2009-03-11_1116.pngDjango-svn-revision is a Django pluggable app that can be added easily to your existing Django application.   It gives you the ability to embed the revision into the meta tags or any other place in your views.  

This originally started out as just a template tag that would call svnversion every time the page loaded.  Then we refined it to use an __init__.py file beforehand to limit resources.  Finally we converted it into a pluggable app so it will work easily with other applications.  

One useful application is to help out the QA process by enabling testers to match up revisions.  Django-svn-revision is available on our github repository for download. Feel free to use it in your project.  Let us know how it works out!



Labels:

Dramatically Reduce Form Submission Spam With A Hidden Field

You've set up your site and its contact form and you have started getting traffic. Then one day the person getting the contact requests forwards you a spam submission:

"We are getting tons of these. Is there a fix our web guy can implement?"

Your immediate response may be to install a captcha. That will work, although it is a bit much for a simple contact form.

An alternative solution is to simply include a hidden field.
hidden-field.pngIn your css file add:
#email2 { display: none; }

In your contact form add:
<input class="text" type="text" name="email2" id="email2" />

Finally, in your server side processing script add logic to the effect of:
if request.POST.get('email2','')=='':
    #process form

And that is it. This will trick the spam bot to think that there is an extra email field in your form that needs to be filled out. It will automatically fill it out and submit the form. By filtering any form submissions that have this extra field entered, you can exclude the non-human submissions.



Labels: , , , ,

One Click Process Termination - Task Killer [for Windows]

Every now and then you get a process that just does not want to coordinate. How many times have you seen this?
Untitled.pngThe usual way of going about terminating this process would be to:

Right click the taskbar, select task manager, click process, click end process, click ok? or Press ctrl+alt+delete, open task manager, click process etc...

How about two clicks? That is what task killer enables you to do. It's a very handy program to quickly clean up your system of processes you don't need running.
tk_big.gif
This tool is free for Windows users and can save you a lot of time.



Labels: , ,

iMacros for Firefox: Automate time consuming repetitive processes

typing-robot-thumb.jpgWhen testing a web form, it can be tedious to constantly enter in the data over and over, especially for multi page forms. Auto form fillers are good but they don't automatically submit the page and fill out subsequent pages.

I have tried a few macro recorders and one has become my go-to for testing forms. iMacros for Firefox is a free Firefox plugin that allows you to record and play back macros.

What I like about it:

  1. Macros are simple text files that can be edited in a text editor.
  2. The macro language is very extensible and can perform most any web task.
  3. You can share macros through a link.
Another free macro utility (Windows only) I recently found is AutoIt. AutoIt has more coverage of things it can do since it is not dependent on a browser. The macro language is also very capable of many tasks.

A more advanced plugin that can achieve the same automation results is Selenium IDE. It is more versatile than the previously mentioned macro recorders, since it can be fine tuned to run during an automated test process directly on a server. Selenium IDE is also free and works wherever Firefox does.

Whichever you choose, the time saved by running macros can greatly improve your programming efficiency, allowing for more time for other tasks--like foosball.



Labels: , ,

Workplace Competition - Does it Help or Hinder?

2630498129_2b79af7017_b2.jpgWe love to have fun friendly competition. We've done bowling, pool and even paintball outings. Now we're competing to identify ideas.

Recently our lead blogger David Wertheimer headed up a competition that will in turn get this blog rolling with content. The way it works is that if at any time during the day (even in client meetings, since it makes for a good conversation starter) you hear someone mention something blogworthy, you simply call out "Blog Post" and earn a point in the game, with a second point going to whoever writes the post. We also are having a baking competition tomorrow.

I feel like these competitions are good but they do raise some concern. I've done some research on competition in the workplace and have found some interesting observations. 

Jody Urquhart advises companies not to create undue competition among individuals:

Urquhart says that when employees have the notion that surpassing others is more important than doing a good job, they lose focus and start putting out low-quality work. She says that organizations can achieve so much more when they channel the same energy that drives competition into work that requires collaboration and shared objectives. "Cooperation should be valued over competition" writes Urquhart, "because teams are far more powerful than individuals.

Slow Leadership, in investigating workplace competition, noted a more Machiavellian result:

In a world of no-holds-barred competition, those who rise to the top are the most ruthless, the most driven, and -- all too often -- those with the weakest consciences. Who rises to the top? The most able and honorable competitor, or the cheater? Can you tell until it's too late? Does the rash of top executive prosecutions tell you anything about the results of a "winner takes all" outlook?

My take on it is that a little competition is good but if it gets in the way of your usual work it can be a hindrance.  A good method for helpful competition is to concentrate on teamwork and collaboration.

How do you feel about workplace competition?


Labels: ,

The great Ai Baking competition

Web development is a process that takes time and depending on how you set things up from the beginning, it can have a strong effect on how things turn out in the end. There is another process that is similar to this... Baking. A few of us have discussed having a bake off where the participants will bring in a baked good and then have the rest of the crew judge based on appearance, taste, overall impression and creativity. Any Ai'er can bring something and those who don't can judge. All submissions to the Ai Bakeoff must be baked from scratch. We've decided to have the bake off this Thursday at lunchtime. We're bringing in prized baked good and a healthy appetite. Photos and happy stomachaches to follow.

Labels:

Kick your footer into gear with a dynamic copyright

Year after year we end up changing copyright footers. Here are some snippets that will automatically update the year in your copyright text.

Django:
{% now "Y" %}

Ruby on Rails:
<%= Time.now.year %>

PHP:
<?php echo date('Y'); ?>

Smarty:
{$smarty.now|date_format:"%Y"}

JavaScript:
<script type="text/javascript">    
 document.write(new Date().getFullYear()); 
</script>


Labels: , , ,