The latest news ranked according to its popularity by YOU

Development Blog

Back to Work

It's been awhile since i've put some effort into The Peoples' Feed but now I'm back in business.  I've been spending a bit of time working on the site.  Recently, I've done work to spread out the items on the homepage out amongst participating feeds.  I've done a lot to prevent errant feeds from slowing down the download process.   I've also added code to avoid errors in cases when people use an incorrect address.  Remember, you can check out the recent changelog @ Github.  Remember, let me know if you have any suggestions.

 

Ridesabike.com

I just ressurected my first ruby on rails projet to see how it worked.  You can check it out here.   Looking back, it has quite a few cool features and doesn't look that terrible.  One of the coolest features is the photo gallery section.  The site allows you to bulk upload a collection of photos to the site.

Ping Pong Points

There is a new development effort in town!  To fill a need for a ping pong rating system at work (we are lucky enough to have a ping pong table!)  I've created the site Ping Pong Points.  This site scores players' ping pong matches using the ELO system.  The system accounts for differences in players skills and margin of defeat.  Check it out!  It's also hosted on Github.  Enjoy.

Improving Email Deliverability With Reverse DNS

Email deliveribility is big business these days; both for email senders and email clients.  There is a lot of money to be made by emailing consumers, especially if you can manage to get the email avoid the dreaded spam mailbox.  There is also a lot of competition among email hosting providers attempting to get the best algorithms in place to help their consumer avoid spam.  One technique is by using reverse DNS lookup.

 

Whenever an email is sent, the computer that receives the email will know the IP that the email originally came from.  In GMail, you can view the original email source and you will find a line like:

 

Received: from dmx1.bfi0.com ([208.70.142.106])

 

Most mail clients will lookup the domain that belongs to that IP that send the email and ensure that it matches the domain that the email is claiming to come from.  This is one approache that you can take to improve email deliveribility.

 

Contact your hosting company or email domain provider in order to setup a reverse DNS entry.  It should help your email deliveribility greatly.  I sent my hosting company hostingrails.com a quick support ticket and they had everything set up in a matter of hours.

 

Until next time!

Google Analytics Parameters

Google analytics can be used to record statistics about visititors to your site, their viewing habits, and much, much more.  One great application of Google Analytics (GA) is to tag your links using predefined tags.  There are several good tags to use:

  • utm_medium
    • utm_medium can be used to specify the medium with which the traffic came from.  Examples can include email, affiliate links, etc...
  • utm_source
    • utm_source should indicate the source.
  • utm_campaign
    • utm_campaign is the advertising campaign that attracted the consumer to visit the site.
  • utm_content
    • The content or creative that attracted the consumer.
  • utm_term
    • Any terms that was used to attract the consumer to your website.


An example of those parameters in action follows:

 

<%= @email_a_friend_settings.url %>?utm_medium=email&utm_source=emailafriend

 

In practice, I mainly use utm_medium and utm_source to help track exactly where traffic comes from.  For an example, try using the email a friend functionality and email yourself to see those parameters in practice.

Validating Emails With MX Records

We are constantly at war with spammers.  Part of that war includes ensuring that the information we collect is accurate and honest.  One tool we can use to help weed out spammers is to validate the email addresses that our consumer's supply.  Syntactic validation is fine, but most consumers can pick an email that passes a quick syntax check.  You can take it one step further by ensuring the consumer's email address passes an MX record check.  An MX record (or mail exchanger record) is part of a domains DNS entry.  The record indicates to which server emails should be delivered.


To check an mx record, try the following in a terninal (or cygwin):

bash~ nslookup

>set type=MX
>www.thepeoplesfeed.com

Address:    167.206.245.130#53
Non-authoritative answer:
www.thepeoplesfeed.com    canonical name = thepeoplesfeed.com.
thepeoplesfeed.com    mail exchanger = 0 thepeoplesfeed.com.

 

You can see that The People's Feed has a single MX record.

Ensuring that an MX record exists can help check everyone's inputs and weed out spammers.  This check is relatively simple in many languages. You can perform it in Ruby like this:

 

domain = result[1]
Resolv::DNS.open do |dns|
  mx = dns.getresources(domain, Resolv::DNS::Resource::IN::MX)
end
    
mx.size > 0 ? true : false  

Fixing sloppy URLs

Fancy URLs like this one:

http://www.thepeoplesfeed.com/feed_item/87044-Miniature-Prototype-of-T-Rex-Is-Found-in-China

can enhance the SEO value of links. Also, they shed some light on the content of the link if you only have the link to reference. How many times have you been emailed a link only to have no idea what it linked to. Having a reference to the contents of the link in the link URL is really nice. I borrowed some inspiration from Obie Fernandez in order to accomplish this.

Obie recommends overriding the to_param method on your models in order to generate a fancier URL. For more information, on how this works, check out his site.

You might be wondering how rails parses these fancier URLs. Almost by chance, rails uses the to_i method for the ':id' section of the url.

For example, consider the URL:
http://www.thepeoplesfeed.com/feed_item/87044-Miniature-Prototype-of-T-Rex-Is-Found-in-China

The system matches 'feed_item' to the controller and then assume that '87044-Miniature-Prototype-of-T-Rex-Is-Found-in-China' is the id parameter. Calling to_i on the '87044-Miniature-Prototype-of-T-Rex-Is-Found-in-China' will result in 87044 which will work well with our existing actions.

So, at this point, everything is working well, right??!? Not quite. The problem is that any URL that starts with the number will also work. This could lead to duplicate content penalties with Google. For example, all the following URLs will work:

  • http://www.thepeoplesfeed.com/feed_item/87044-Miniature-Prototype-of-T-Rex-Is-Found-in-China
  • http://www.thepeoplesfeed.com/feed_item/87044-Miniature-Prototype-of-T-Rex-Is
  • http://www.thepeoplesfeed.com/feed_item/87044

In order to avoid this issue, I wrote some simple code that will ensure that the correct URL is used. If a consumer goes to the incorrect URL, the system will redirect them to the proper URL:

# Fixes any URL's that are not quite perfect but parseable by providing a 
# redirect to the proper URL.
def fix_sloppy_urls(content)
if !url_for(content).ends_with(request.path)
redirect_to content
end
end


This works pretty well to ensure we have the correct URL for the content we are viewing.

Redmine Review

I have spent some more time evaluating Redmine and I am changing my tune a bit. I've learned how to add comments to bug. I like the roadmap functionality. I'm still not a huge fan of the project management features although they don't hurt.

Adding comments to an issue requires the user to click the "update" button on the particular issue. I do not find this intuitive. Clicking "update" does reveal other options, such as adding a file to the bug. I would expect commenting on a bug to be one of the most used features. Why not have a "comment" button.

The projects that I track with Redmine are largely on the side projects. Using Redmine, especially the roadmap capabilities will really help me chunk features into specific release groups.

Overall, I am going to give Redmine a 8.2/10 rating.
Positives:
  • FREE
  • High level of comparability
  • Ease of use
Negatives
  • Sometimes hard to figure out how to do certain options.
  • Unnecessary project management features complicate the product

All Points West - New Jersey

This past Saturday, I went to the All Points West music and arts festival at beautiful Liberty State Park in Jersey. This past Saturday was actually the first time being in at the park. It is an extremely beautiful park overlooking downtown Manhattan, the Statue of Libertyx, and Ellis Island. As a side note, it also appears to have enough room and decent enough roads to do some jogging/cycling laps on.

The entire festival going experience was not a positive one. Besides the incredibly gorgeous park, there were several problems with the show. Firstly, there were not enough acts to keep you occupied. The acts were sparely scheduled and I often found myself growing very bored waiting for the next act to come on stage. The concert organizers should have made better use of the space they had to be sure there was always something interesting to see.

It rained for large portions of time during All Points West. This lead to very muddy conditions on the grounds. While I'm pretty sure the technology doesn't yet exist to prevent rain, the concert organizers should have put down hay or woodchips to help combat the mud.

The food and beverage choices at All Points West were miserable. As far as alcoholic beverages go, there were a total of 6 choices. Regular beer, light beer, two types of fancy beer, and two bottled mixed drinks. Worse off than the drink was the food. I ate one order of chicken fingers and one one slice of pizza. When considered amongst food from their respective categories and taking into account this was food at a outdoor festival, these items still ranked at the extreme bottom of the list of tastiness and overall enjoyment. They were basically inedible.

[[Rant Over]] I take All Points West to be a learning experience for myself. This concert exemplifies how a poor feature set (music, food and drink) will easily overcome killer functionality (the wonderful park). The overall value of your project will be weighed down by the sections of the project that are lacking. I believe this is a perfect opportunity to spend some time this weekend working on the registration aspects of TPF. This part of the site has been largely neglected thus far. Providing consumers with an enjoyable and effective way to utilize the site from a known consumer point of view should prove a very interesting challenge.

Starting an Open Source Website

I've been working on The People's Feed as the lead developer for several months now. It has been a rewarding experience designing and creating a website from the ground up. I'm fairly technically competent, however, I don't have much design sense. Also, another set of eyes could really help with new ideas. So far, we have been missing other individuals to help with development, design, ideas, etc... I've been searching for ideas how I could attract people to join the team. Here are a couple of the ways I've thought of to interest people in joining an effort like this. If anyone else has any suggestions, drop me a line.

I have been posting information about The People's Feed on a variety of Ruby On Rails open source websites such as Open Source Rails. I've generated a small amount of traffic to TPF, but no bites yet.

Soon, I plan on launching a small adwords campaign in order to attract people to what I believe is a very interesting opportunity. I have a $25 gift certificate for adwords and I'm hoping that the cost won't run much higher than that. This is exciting because it will allow me to bring consumer's who are very interested in joining an open source project. Hopefully this will bring some more people on board.

Finally, I'm going to RubyFX in Washington, D.C. soon. I'm going to have some TPF business cards created for that event. We'll see if this event has an open minding individuals.

-Till next time.

Top Feeds

Top Categories

Top Media

Last Updated: September 04, 2010