using hpricot to auto-populate link information

by Mike Zazaian at 2009-09-05 03:57:10 UTC in gems

a nifty way to automatically grab title or description tags from the destination page of a url

29 comments 7 links

So I recently discovered a nifty feature on Facebook where you can enter a link into your status bar and it automatically populates the title and description for the web page that can be found at that link. Smart.

Concurrent to but not as a result of this, at some point, it occurred to me that it might be useful to attach links, raw links, to the articles here on do{block}.

I remembered too, reading over and over again about an HTML parser called Hpricot, developed by Ruby's resident rockstar _why the lucky stiff, which, while I've never used it before, seemed like it would get the job done for me.

And it did. Allow me to elaborate:

hpricot

Either a hip apricot, or a hyper-icot, or for your purists, just a hpricot and I should go jump off a bridge for suggesting otherwise. Whatever the case, it's a pretty useful HTML parser which, astonishingly enough, you can install like this:

$ sudo gem install --remote hpricot

Gee, wacky. This, along with Ruby's built in "open-uri" library, will give us ample tools to grab the html from a remote location, parse out that html into a Hpricot object/array, and extract specific bits of data from whichever tags our hearts desire.

Lovely.

But before we take another bite out of said hpricot, or elaborate upon why you can't find any literature about it at all except for its rdoc and this simple documentation page, let's talk a little bit about _why, the mysterious rubyist who ran away.

why, _why?

_why the lucky stiff, for those of your unfamiliar with him, has been a bit of an icon in the Ruby community for the past several years.

He published and illustrated _why's poignant guide to ruby, an insightful demi-fictional-Ruby-how-to-novella that was touted on the Rails homepage and was how I and many others were first drawn into the language and the Ruby community.

He's responsible for the try ruby! interactive Ruby demo on the Ruby homepage, and myriad open source applications such as camping, RedCloth, Shoes (which I've used extensively and love), and many others that you've heard of and have long been staples in the Ruby community.

Anyway, he's gone. Apparently at some point he kind of closed up shop and left town without a word, having shut down ALL of his web properties in the meantime, and leaving many (including us) in the dark without any of his well-illustrated, post-modern instruction.

Just telling you in case you go looking for any trace of him. All that's left are some mirrors that dutiful ruby-ites have put up of his past work. But that's it, all else has vanished. Weird.

getting on with our lives and this tutorial

Okay, so _why has taken something of an abrupt sabbatical, but he's left hpricot in his wake and that's good enough for me for the time being. The weight of the world gets to all of us at some point.

Now -- suppose that you've got a link model that you want to attach to articles, or even that you want to devise some nifty system in which links attached to or within articles automatically input the title of the destination page as the title for that link tag. Both of these would be very useful, but for either you'd probably want to integrate the action into the Link Model itself. It might look something like this:

#!/app/models/link.rb

class Link < ActiveRecord::Base

  attr_reader :html
  def html(sync=false)
    unless sync || @html
      @html = Link::HTML.new(url)
    else
      @html
    end
  end
  
  class Link::HTML
    # require html-parsing library
    require 'rubygems'
    require 'hpricot'
    require 'open-uri'
    
    attr_reader :title, :desc, :doc
    def initialize(link)
      begin
        @result = open(link)
        @doc = Hpricot(@result)
        @result.close
      rescue
        @doc = nil
      end        
    end

    def title
      unless @doc.nil?
        @title = @doc.at("title").inner_html
        return @title unless @title.nil?
      end
      return ""
    end

    def desc
      unless @doc.nil?
        @desc = @doc.search("//meta[@name='description']").first
        return @desc["content"] unless @desc.nil?
      end
      return ""
    end
  end


end

Let's look at the Link::HTML class first. The first thing that we do is to ensure that rubygems, hpricot, and the open-uri library are all or have already been required for our use. With that in place we can set up the Link::HTML#initialize method, which will grab and parse all of the html for the destination page at the link provided:

def initialize(link)
    begin
      @result = open(link)
      @doc = Hpricot(@result)
      @result.close
    rescue
      @doc = nil
    end        
  end

The open() method is actually provided by the open-uri library, which returns the destination html file for link. We then pass that file through the Hpricot() constant/method, which will parse the contents of that html file into a nifty Hpricot object/array that contains all of the page's html tags in order. This Hpricot object/array is then stored in the @doc instance variable so we can play with it later.

The method will also rescue this process from any errors that might occur in the event that (link) is not a valid url or if open() fails in grabbing the html from that destination.

But before we go into actually fetching the title and description for the page we just fetched, let's first look at the html method in the Link model that we created to access Link::HTML. The html method, or Link#html, is used to ensure that a new Link::HTML object is created only when one doesn't exist, or when it's called with the html(true) parameter. This saves us from fetching the destination html anew everytime you want to perform actions on it.

Also, and this is really, REALLY IMPORTANT, this function assumes that you've got a field called url in your Link model, so that you can fetch the destination html by calling:

@html = Link::HTML.new(url)

If you don't have a url field in your Link model, or if you don't have a Link model at all, just replace url with whatever variable contains the url for the destination page you're trying to retrieve.

Whew, I'm glad we cleared that up. With this in place you can now call @link.html from a Link object and return a formatted array of the html from the destination page. Nifty.

describing the indescribable

We've now got this massive array of html bits in the form of a Hpricot object stored in @doc which, while perhaps not immediately useful to us, will pay dividends very soon. Specifically, we'll be able to use methods within the @doc/Hpricot object to return useful bits like the title and the meta description from the page. Here are those methods from the above code:

def title
  unless @doc.nil?
    @title = @doc.at("title").inner_html
    return @title unless @title.nil?
  end
  return ""
end

def desc
  unless @doc.nil?
    @desc = @doc.search("//meta[@name='description']").first
    return @desc["content"] unless @desc.nil?
  end
  return ""
end

To get the title we use the built-in Hpricot#at method, which returns just the first instance of the tag that we pass in as a parameter, in this case "title". We use #at here because we know the page should have only one title tag, and we don't want it to work any harder than it needs to. Then, once we've got that title tag, we use the inner_html method to just grab the text within the tag, and not the tags themselves. Simple.

Getting the description, or desc as I've named the method above, is a little more convoluted. As opposed to there being one single tag, there are usually MANY meta tags, so we're going to have to use Hpricot#search instead of Hpricot#at. Also, we're going to have to get the tag where the name attribute is "description". To do this Hpricot uses the strange but reasonably succinct <a href="http://www.w3schools.com/XPath/default.asp">XPath syntax</a>. I'd never really used XPath before, but it's easy enough to understand and use.</p> <p>Once you've accessed the proper meta tag and assigned it to <strong>@desc</strong>, we then return @desc["content"] instead of #inner_html because all we care about is the "content" attribute of the "description" meta tag, as <meta /> tags aren't closable anyway.</p> <p>For reference, you can also use a css selector syntax and even a path constructed of Ruby symbols to access items like these in the Hpricot object. To get more info on this process and/or the other myriad capabilities of Hpricot, I suggest that you read through the Hpricot Rdoc files, or checkout <a href="http://github.com/whymirror/hpricot/blob/2c961095954d5aaa5c046f4c773c62c3d5902ef4/README">the README file</a>, hosted as a mirror of _why's original hpricot project on github.</p> <p>Now that we've got the <strong>title</strong> and <strong>desc</strong> methods squared away, we can now grab the title or meta description for the link's destination page by calling <strong>@link.html.title</strong> or <strong>@link.html.desc</strong> respectively. Simple, easy, powerful.</p> <h2>the (marginally) grand finale</h2> <p>Okay, so we've smartly relegated all of this business logic into our Link model so that we can keep our controllers uncluttered, and also to prevent the need to repeat any of this elsewhere in our application (vewy, vewy DRY).</p> <p>Now -- you're obviously a wise and cunning individual or you wouldn't have otherwise found this article, let alone continued to read through the plethora of tangents and diatribes with which I've cluttered it. As such, I'm sure that you've already dreamed up a hundred different ways to use this, and more power to you.</p> <p>However! Because I'm an unrelenting narcissist, I'm going to show you what I did with it, to perhaps urge along your own creative juices, or, at the very worst, monopolize and waste your precious time. Here's a snippet of my Links controller:</p> <pre class="blackboard"><span class="Comment"><span class="Comment">#</span>!/app/controllers/links_controller.rb</span> <span class="Keyword">def</span> <span class="Entity">create</span> <span class="Variable"><span class="Variable">@</span>article</span> <span class="Keyword">=</span> <span class="Support">Article</span>.<span class="Entity">find</span> params[<span class="Constant"><span class="Constant">:</span>article_id</span>] <span class="Variable"><span class="Variable">@</span>link</span> <span class="Keyword">=</span> <span class="Variable"><span class="Variable">@</span>article</span>.<span class="Entity">links</span>.<span class="Entity">build</span>( params[<span class="Constant"><span class="Constant">:</span>link</span>].<span class="Entity">merge</span>(<span class="Constant"><span class="Constant">:</span>user_id</span> => session[<span class="Constant"><span class="Constant">:</span>user_id</span>])) <span class="Comment"> <span class="Comment">#</span> Grab title and description from link landing page unless the html is invalid</span> <span class="Keyword">unless</span> <span class="Variable"><span class="Variable">@</span>link</span>.<span class="Entity">html</span>.<span class="Entity">doc</span>.<span class="Entity">nil?</span> <span class="Variable"><span class="Variable">@</span>link</span>.<span class="Entity">title</span> <span class="Keyword">=</span> <span class="Variable"><span class="Variable">@</span>link</span>.<span class="Entity">html</span>.<span class="Entity">title</span> <span class="Keyword">unless</span> <span class="Variable"><span class="Variable">@</span>link</span>.<span class="Entity">title</span>.<span class="Entity">size</span> <span class="Keyword">></span> <span class="Constant">0</span> <span class="Variable"><span class="Variable">@</span>link</span>.<span class="Entity">description</span> <span class="Keyword">=</span> <span class="Variable"><span class="Variable">@</span>link</span>.<span class="Entity">html</span>.<span class="Entity">desc</span> <span class="Keyword">unless</span> <span class="Variable"><span class="Variable">@</span>link</span>.<span class="Entity">description</span>.<span class="Entity">size</span> <span class="Keyword">></span> <span class="Constant">0</span> <span class="Keyword">else</span> flash.<span class="Entity">now</span>[<span class="Constant"><span class="Constant">:</span>warning</span>] <span class="Keyword">=</span> <span class="String"><span class="String">"</span>the page at url <span class="Constant">\"</span><span class="String"><span class="String">#{</span>params<span class="String">[</span><span class="Constant"><span class="Constant">:</span>url</span><span class="String">]</span><span class="String">}</span></span><span class="Constant">\"</span> could not be loaded<span class="String">"</span></span> <span class="Keyword">end</span> <span class="Keyword">if</span> <span class="Variable"><span class="Variable">@</span>link</span>.<span class="Entity">save</span> redirect_to <span class="Variable"><span class="Variable">@</span>article</span> <span class="Keyword">else</span> render <span class="Constant"><span class="Constant">:</span>action</span> => <span class="String"><span class="String">"</span>new<span class="String">"</span></span> <span class="Keyword">end</span> <span class="Keyword">end</span></pre><p>As you'll see, it's pretty standard. The Article model builds the actual link (it's polymorphic in my application -- belongs_to :linkable), and assigns the active user's id to it. Then, as a surge of fresh, Atlantic air rushes through the treetops, and an ascension of larks (that's a proper collective noun for larks, also "exaltation") scatters from the trees, our neato Link#html method automatically fetches and populates the fields for the link title and description unless they've already been filled in by the user.</p> <p>Also, in the event that no url was provided, or that the url couldn't be opened by the open-uri library, we provide a <strong>flash.now[:warning]</strong> message to alert the user as to what went wrong. Done.</p> <h2>in memoriam of this article, and _why</h2> <p>Wow, that was touching.</p> <p>You might even want to reitereate that functionality in the <strong>edit</strong> method of your LinksController, but who am I to boss you around? Obviously there's a lot of opportunity here to use Ajax to implement these methods on the fly, or whatever you want to do. We've already established that you're the genius, and I'm just some weird solopsistic Ruby demagogue trying to indoctrinate anybody willing to lend an ear. In the meantime you can save yourself, and your application's users the hassle of having to automatically populate title, description, or any other fields that Hpricot and open-uri can handle for them.</p> <p>Indeed, _why is a great man, and his Hpricot a robust and powerful tool, and clearly there's a great deal more to say on both of them, but that'll be for another day.</p> <div id='links'> <h3>7 links</h3> <div class='linkItem'> <a href="http://github.com/whymirror/hpricot/tree/master">whymirror's hpricot at master - GitHub</a> <div class='linkDescription'>A swift, liberal HTML parser with a fantastic library</div> </div> <div class='linkItem'> <a href="http://tryruby.sophrinix.com/">try ruby! (in your browser)</a> <div class='linkDescription'>an interactive ruby tutorial developed by _why for the Ruby nascents </div> </div> <div class='linkItem'> <a href="http://hpricot.com/">hpricot.com</a> <div class='linkDescription'>an odd little instructional site for hpricot</div> </div> <div class='linkItem'> <a href="http://en.wikipedia.org/wiki/Why_the_lucky_stiff">why the lucky stiff - Wikipedia, the free encyclopedia</a> <div class='linkDescription'>a wikipedia entry on _why the lucky stiff</div> </div> <div class='linkItem'> <a href="http://mislav.uniqpath.com/poignant-guide/book/">why’s (poignant) guide to ruby</a> <div class='linkDescription'>a mirror of _why's original poignant guide site</div> </div> <div class='linkItem'> <a href="http://www.w3schools.com/XPath/default.asp">XPath Tutorial at W3C Schools</a> <div class='linkDescription'>a tutorial on using the XPath syntax implemented by Hpricot</div> </div> <div class='linkItem'> <a href="http://www.rubyinside.com/why-the-lucky-stiff-is-missing-2278.html">“Why The Lucky Stiff” Is Missing</a> </div> </div> </div> </div> </div> <div id='comments'></div> <h2 class='center'>29 comments</h2> <div class="comment" id="comment_67"><div class='gray'> <div class='heading'> <span class='yellow'> <a href="http://sonnerieportablegratuit.com">sonnerie portable gratuit</a> </span> <span class='green'>at 2010-04-05 00:43:30 UTC</span> </div> <div class='body'><p>This article gives the light in which we can observe the reality. This is very nice one and gives in depth information. Thanks for this nice article. Good post.....Valuable information for all.</p> </div> </div> </div><div class="comment" id="comment_73"><div class='black'> <div class='heading'> <span class='yellow'> <a href="http://www.vip-ghdhair.com">ghd staighteners</a> </span> <span class='green'>at 2010-04-19 03:28:41 UTC</span> </div> <div class='body'><p><a href="http://www.vip-ghdhair.com">ghd styler</a> make <a href="http://www.vip-ghdhair.com">ghd</a> outstanding in the competitive market place. The GHD Rare gift sets with stylish box are much loved by people. They are decorated in leopard print to match that of the heat pouch.</p> </div> </div> </div><div class="comment" id="comment_94"><div class='gray'> <div class='heading'> <span class='yellow'> <a href="http://www.adidas-cheap.com">adidasshoes</a> </span> <span class='green'>at 2010-05-07 07:19:28 UTC</span> </div> <div class='body'><p>This pleasing cheap Adidas shoes Originals overlaps with the renowned pigeon colorway of Jeff Staple.You probably have seen last year the sneakers introduced under the series of Adidas Originals which appeared in 4 different designs in screaming colorways. The Gucci outlet Hobo is one of the most advance Gucci handbags. Like all the Gucci wallets, Gucci hobo bag features a revolution in design and functionality. http://www.adidas-cheap.com/ http://www.outlet-gucci.com/</p> </div> </div> </div><div class="comment" id="comment_117"><div class='black'> <div class='heading'> <span class='yellow'> <a href="http://www.silverjewelrylife.com/"> Links of London Jewellery</a> </span> <span class='green'>at 2010-05-10 07:17:49 UTC</span> </div> <div class='body'><p>What I liked about her, she didn't give you a lot of horse manure about what a great guy her father was.</p> </div> </div> </div><div class="comment" id="comment_177"><div class='gray'> <div class='heading'> <span class='yellow'> <a href="http://www.jeux-voiture-moto.com">Jeux de voiture</a> </span> <span class='green'>at 2010-05-27 11:39:46 UTC</span> </div> <div class='body'><p>This article gives the light in which we can observe the reality. This is very nice one and gives in depth information. Thanks for this nice article. Good post.....Valuable information for all.</p> </div> </div> </div><div class="comment" id="comment_366"><div class='black'> <div class='heading'> <span class='yellow'> <a href="http://vibramshoesonline.com/">vibram fivefingers</a> </span> <span class='green'>at 2010-06-12 04:47:31 UTC</span> </div> <div class='body'><p>I really like this type of vibram fivefingers too, can you help me look at which one has higher price point? <a href="http://vibramshoesonline.com/" >vibram fivefingers shoes</a></p> </div> </div> </div><div class="comment" id="comment_386"><div class='gray'> <div class='heading'> <span class='yellow'> <a href="http://www.mbt-outlet-store.com">mbt</a> </span> <span class='green'>at 2010-06-13 08:58:28 UTC</span> </div> <div class='body'><p>I love travelling so much that I often surfing on many journey forum to learn knowledge about trip, and I think this forum is the best, from where I got the newest information about journey. Here I want recommend some excellent websites http://www.mbt-outlet-store.com/mbt-men-shoes.html, There are many good products help you make a good journey.</p> </div> </div> </div><div class="comment" id="comment_425"><div class='black'> <div class='heading'> <span class='yellow'> <a href="http://www.mbt-outlet-store.com">mbt outlet</a> </span> <span class='green'>at 2010-06-19 04:02:42 UTC</span> </div> <div class='body'><p>The post of content is very interesting and exciting. I learned a lot from here.The content from simple to complex, so all of you can come in . No matter you want to see what can be found.By the way ,there are some websites is also very wonderful,you can go and see.such as http://www.mbt-outlet-store.com/mbt-men-shoes.html</p> </div> </div> </div><div class="comment" id="comment_445"><div class='gray'> <div class='heading'> <span class='yellow'> <a href="http://www.moncler-jackets-outlet.com">moncler outlet store</a> </span> <span class='green'>at 2010-06-21 09:59:42 UTC</span> </div> <div class='body'><p>Here elaborates the matter not only extensively but also detailly .I support the write's unique point.It is useful and benefit to your daily life.You can go those sits to know more relate things.They are strongly recommended by friends.Personally I feel quite well. http://www.see-for.com</p> </div> </div> </div><div class="comment" id="comment_455"><div class='black'> <div class='heading'> <span class='yellow'> <a href="http://www.mbt-outlet-store.com">mbt walking shoes</a> </span> <span class='green'>at 2010-06-22 04:58:07 UTC</span> </div> <div class='body'><p>It looks good,I have learn a recruit! Recently,I found an excellent online store, the XX are completely various, good quality and cheap price,its worth buying! http://www.mbt-outlet-store.com/mbt-women-shoes.html</p> </div> </div> </div><div class="comment" id="comment_470"><div class='gray'> <div class='heading'> <span class='yellow'> <a href="http://www.moncler-down-jackets.com">moncler</a> </span> <span class='green'>at 2010-06-23 01:36:05 UTC</span> </div> <div class='body'><p>Hhe article's content rich variety which make us move for our mood after reading this article. surprise, here you will find what you want! Recently, I found some wedsites which commodity is colorful of fashion. Such as that worth you to see. Believe me these websites won’t let you down</p> </div> </div> </div><div class="comment" id="comment_515"><div class='black'> <div class='heading'> <span class='yellow'> <a href=" http://www.bootoutletstore.co.uk">ugg boots sale</a> </span> <span class='green'>at 2010-06-26 05:26:02 UTC</span> </div> <div class='body'><p>Hhe article's content rich variety which make us move for our mood after reading this article. surprise, here you will find what you want! Recently, I found some wedsites which commodity is colorful of fashion. Such as that worth you to see. Believe me these websites won’t let you down.</p> </div> </div> </div><div class="comment" id="comment_521"><div class='gray'> <div class='heading'> <span class='yellow'> <a href="www.mbt-outlet-store.com">mbt shoes sale</a> </span> <span class='green'>at 2010-06-26 09:07:06 UTC</span> </div> <div class='body'><p>These games are awesome and the graphic is awesome as well,I recently playing them days and nights!,and I definitely agrree what up floor said. I would like to play the game with updated graphics, but then again, I think they game should be "perfect" and faithful to the original. Another I gonna buy some shoes and clothes ,you guys give some advises for me about below websites at www.boots-outlet-stores.us .Thanks</p> </div> </div> </div><div class="comment" id="comment_576"><div class='black'> <div class='heading'> <span class='yellow'> <a href="http://www.vibramfivefinger.us">vibram five fingers</a> </span> <span class='green'>at 2010-06-29 07:09:49 UTC</span> </div> <div class='body'><p>vibram five fingers <a href="http://www.vibramfivefinger.us" title="vibram five fingers">vibram five fingers</a> vibram five fingers ed hardy shirts [url=http://www.cheap-ed-hardy.com/ed hardy shirts-c-66]ed hardy shirts[/url] ed hardy shirts</p> </div> </div> </div><div class="comment" id="comment_577"><div class='gray'> <div class='heading'> <span class='yellow'> <a href="http://www.bestghdstraighteners.com/">cheap ghd hair straighteners</a> </span> <span class='green'>at 2010-06-29 08:07:13 UTC</span> </div> <div class='body'><p>I'm very interested in your article, and I suggest you to browse some online stores to find something different. Such as: [url=http://www.mydiscountjordanshoes.com]cheap air jordans shoes[/url]and [url=http://www.bestlvbags.com]replica louis vuitton bags[/url],[url=http://www.chiflatironhair.us]chi hair flat iron[/url],[url=http://www.vibramfivefinger.us]five fingers shoes[/url]. I believe you would like the[url=http://www.buyghdstraightener.com]ghd straighteners[/url],[url=http://www.nfljerseysshopping.com]nfl football jersey[/url]. What’s more, the [url=http://www.buychihairstraightener.com]chi straighteners[/url], [url=http://www.ed-hardy-shirts.us]cheap ed hardy clothing[/url], [url=http://www.u99snowboots.com]ugg uk sheepskin boots[/url], [url=http://www.rolexeswatch.com]replica rolex watch ladies[/url] t shirt would give you an unifque life.</p> <p>[url=http://www.bestlvbags.com/louis-vuitton-stephen-sprouse-c-103.html]louis vuitton stephen sprouse[/url] [url=http://www.bestlvbags.com/louis-vuitton-taiga-leather-c-105.html]louis vuitton taiga[/url] [url=http://www.bestlvbags.com/louis-vuitton-damier-series-c-113.html]louis vuitton damier[/url] [url=http://www.bestlvbags.com/louis-vuitton-damier-series-c-113.html]louis vuitton damier geant canvas[/url] [url=http://www.bestlvbags.com/louis-vuitton-damier-series-c-113.html]louis vuitton handbags damier[/url] [url=www.bestlvbags.com/]louis vuitton[/url] [url=www.bestlvbags.com/]louis vuitton handbags[/url] [url=www.bestlvbags.com/]louis vuitton bag[/url] [url=www.bestlvbags.com/]louis vuitton luggage[/url] [url=www.bestlvbags.com/]louis vuitton purse[/url] [url=http://www.bestlvbags.com/louis-vuitton-2010-new-c-1.html]louis vuitton handbags[/url] [url=http://www.bestlvbags.com/louis-vuitton-2010-new-c-1.html]louis vuitton bag[/url] [url=http://www.bestlvbags.com/louis-vuitton-2010-new-c-1.html]louis vuitton luggage[/url] [url=http://www.bestlvbags.com/louis-vuitton-2010-new-c-1.html]louis vuitton purse[/url] [url=http://www.bestlvbags.com/louis-vuitton-utah-leather-c-107.html]louis vuitton utah[/url] [url=http://www.bestlvbags.com/louis-vuitton-classic-china-run-c-97.html]louis vuitton classic china run wallets[/url] [url=http://www.bestlvbags.com/louis-vuitton-cruise-collection-c-99.html]louis vuitton cruise[/url] [url=http://www.bestlvbags.com/louis-vuitton-cruise-collection-c-99.html]louis vuitton bulles cruise bag uk[/url] [url=http://www.bestlvbags.com/louis-vuitton-agendas-c-3.html]louis vuitton agendas[/url] [url=http://www.bestlvbags.com/louis-vuitton-monogram-series-c-112.html113.html]louis vuitton monogram[/url] [url=http://www.bestlvbags.com/louis-vuitton-monogram-series-c-112.html113.html]louis vuitton monogram blanket[/url] [url=http://www.bestlvbags.com/louis-vuitton-monogram-series-c-112.html113.html]louis vuitton monogram canvas[/url]</p> </div> </div> </div><div class="comment" id="comment_586"><div class='black'> <div class='heading'> <span class='yellow'> <a href="http://www.allnakedsex.com">naked girl</a> </span> <span class='green'>at 2010-06-29 11:40:41 UTC</span> </div> <div class='body'><p><a href="http://www.xxxwho.com">online webcam girls</a> <a href="http://www.allnakedsex.com">free naked chat</a> and <a href="http://www.indexcams.com">live cams</a></p> <p><a href="http://www.nude-webcam-sex.com">nude chat</a> and <a href="http://www.xxxsocial.com">webcam dating</a> <a href="http://www.world-sex-live.com">live</a></p> <p><a href="http://www.tv-nude.com">Webcam Nude</a> <a href="http://www.live-sex-blog.com">live chat</a> with <a href="http://www.probabe.com">sexy babes</a></p> <p><a href="http://www.live-sex-blog.net">live girls</a> <a href="http://www.live-cam-porn.com">free cam</a> <a href="http://www.xfeeder.com"> live feeds</a></p> <p><a href="http://nude.live-sex-blog.com">nude</a> <a href="http://babes.live-sex-blog.com">babes</a> <a href="http://www.dvd-video-blog.com">videos</a></p> <p><a href="http://www6.thumblogger.com">free</a> <a href="http://nudesex.thumblogger.com">nude</a> <a href="http://webcam-babes.thumblogger.com">webcam babes</a></p> <p><a href="http://www.incityhotels.com">city hotels</a> - <a href="http://www.pill-blog.com">pills</a> <a href="http://www.herbal-review.com">reviews</a></p> <p><a href="http://www.maturescam.com/index.php?psid=sexywebcams&pstour=t1&psprogram=REVS">Mature Webcams</a> <a href="http://www.livesexasian.com/listpage.php?psid=sexywebcams&pstour=t1&psprogram=REVS">Asian Webcam Girls</a> <a href="http://www.cameraboys.com/listpage.php?psid=sexywebcams&pstour=t1&psprogram=REVS">Live gay webcams</a></p> <p><a href="http://www.2.livejasmin.com/listpage.php?category=Girl&subcategory=Ebony&type=40&psid=sexywebcams">Free Ebony Webcams</a> <a href="http://asian.nude-webcam-sex.com">asian</a> <a href="http://www.blogorama.ro">blog</a></p> </div> </div> </div><div class="comment" id="comment_627"><div class='gray'> <div class='heading'> <span class='yellow'> nrtt </span> <span class='green'>at 2010-06-30 08:00:54 UTC</span> </div> <div class='body'><p>I decided to do things that will certainly buy <a href=http://www.edhardyclothing2u.com/>ed hardy</a> clothes that I decided to do. Autumn is wearing <a href=http://www.atimberlandboots.com/>timberland boots</a> I decided to do. I will wear when climbing <a href=http://www.adidashoesstore.com/>adidas shoes</a>. I went to the beach when everyone would wear <a href=http://www.nikeshoxairforce1.com/>nike shox</a>. These are all absurd. But I just love to do according to my personality. What I like <a href=http://www.edhardyclothing2u.com/ed-hardy-womens-tank-c-8.html>ed hardy tank</a> and you are not the same. Adidas, I only like to wear <a href=http://www.adidashoesstore.com/adidas-adicolor-c-1.html>adidas adicolor</a>. This selection of Nike shoes <a href=http://www.nikeshoxairforce1.com/nike-shox-turbo-c-39.html>nike shox turbo</a> only choice is the same. I was me.</p> </div> </div> </div><div class="comment" id="comment_717"><div class='black'> <div class='heading'> <span class='yellow'> <a href="http://www.vibramfivefingerssale.us/">five fingers shoes</a> </span> <span class='green'>at 2010-07-01 09:56:18 UTC</span> </div> <div class='body'><p>I totally love this article. I think you could write some other things to make your blog more complete.For example: <a href="http://www.cheap-ed-hardy.com/">ed hardy clothing</a>. <a href="http://www.vibramfivefingerssale.us/">five fingers shoes</a>. <a href="http://www.p90xworkoutdvdset.com/">p90x</a>. <a href="http://www.bestmbtshoes.us/">cheap mbt shoes</a>. <a href="http://www.cheap-ed-hardy.com/ed-hardy-tshirts-c-56">ed hardy t shirts</a>. <a href="http://www.vibramfivefingerssale.us/vibram-fivefingers-mens-classic-c-65">vibram fivefingers classic</a>. <a href="http://www.bestmbtshoes.us/MBT_MWalk-c-28-b0">mbt m walk</a>. I thought that many people can like.</p> <p>Thanks for sharing your article. As a sports fan I adore all kinds of sports equipments. I've got <a href="http://www.vibramfivefingerssale.us/">vibram five finger</a>, <a href="http://www.cheap-ed-hardy.com/ed-hardy-men-hoodies-c-17">hardy hoodie</a> and <a href="http://www.vibramfivefingerssale.us/vibram-fivefingers-women-c-68">vibram kso women</a> and <a href="http://www.bestmbtshoes.us/MBT_Sport-c-30-b0">mbt white sport shoes discounts</a>. <a href="http://www.cheap-ed-hardy.com/">cheap ed hardy clothing</a>. <a href="http://www.vibramfivefingerssale.us/vibram-fivefingers-mens-sprint-c-67">vibram five fingers sprint</a> <a href="http://www.bestmbtshoes.us/">discount mbt shoes</a>. I thought that these are good.</p> </div> </div> </div><div class="comment" id="comment_820"><div class='gray'> <div class='heading'> <span class='yellow'> <a href="http://www.replica-bags-sale.com/">louis vuitton</a> </span> <span class='green'>at 2010-07-05 00:33:40 UTC</span> </div> <div class='body'><p><b><a href=http://www.replica-bags-sale.com/louis-vuitton-handbags-c-158>lv</a></b> features Monogram canvas with natural cowhide trim. The classic <b><a href=http://www.replica-bags-sale.com/>louis vuitton</a></b> and quatrefoil signature design always can attract appreciations from someone special hidden in the crowd. The shiny brass hardware and the modern, feminine shape make <b><a href=http://www.replica-bags-sale.com/>Louis vuitton bags</a></b> exude a more luxurious look. Besides the pleasing appearance, <b><a href=http://www.replica-bags-sale.com/louis-vuitton-handbags-c-158>louis vuitton handbags</a></b> is multi-functional.</p> </div> </div> </div><div class="comment" id="comment_855"><div class='black'> <div class='heading'> <span class='yellow'> <a href="http://www.vibramfivefingerssale.us/">five fingers shoes</a> </span> <span class='green'>at 2010-07-05 05:59:24 UTC</span> </div> <div class='body'><p>I totally love this article. I think you could write some other things to make your blog more complete.For example: <a href="http://www.cheap-ed-hardy.com/">ed hardy clothing</a>. <a href="http://www.vibramfivefingerssale.us/">five fingers shoes</a>. <a href="http://www.p90xworkoutdvdset.com/">p90x</a>. <a href="http://www.bestmbtshoes.us/">cheap mbt shoes</a>. <a href="http://www.cheap-ed-hardy.com/ed-hardy-tshirts-c-56">ed hardy t shirts</a>. <a href="http://www.vibramfivefingerssale.us/vibram-fivefingers-mens-classic-c-65">vibram fivefingers classic</a>. <a href="http://www.bestmbtshoes.us/MBT_MWalk-c-28-b0">mbt m walk</a>. I thought that many people can like.</p> <p>Thanks for sharing your article. As a sports fan I adore all kinds of sports equipments. I've got <a href="http://www.vibramfivefingerssale.us/">vibram five finger</a>, <a href="http://www.cheap-ed-hardy.com/ed-hardy-men-hoodies-c-17">hardy hoodie</a> and <a href="http://www.vibramfivefingerssale.us/vibram-fivefingers-women-c-68">vibram kso women</a> and <a href="http://www.bestmbtshoes.us/MBT_Sport-c-30-b0">mbt white sport shoes discounts</a>. <a href="http://www.cheap-ed-hardy.com/">cheap ed hardy clothing</a>. <a href="http://www.vibramfivefingerssale.us/vibram-fivefingers-mens-sprint-c-67">vibram five fingers sprint</a> <a href="http://www.bestmbtshoes.us/">discount mbt shoes</a>. I thought that these are good.</p> </div> </div> </div><div class="comment" id="comment_865"><div class='gray'> <div class='heading'> <span class='yellow'> <a href="http://www.vibramfivefingerssale.us/">five fingers shoes</a> </span> <span class='green'>at 2010-07-05 06:03:46 UTC</span> </div> <div class='body'><p>I totally love this article. I think you could write some other things to make your blog more complete.For example: <a href="http://www.cheap-ed-hardy.com/">ed hardy clothing</a>. <a href="http://www.vibramfivefingerssale.us/">five fingers shoes</a>. <a href="http://www.p90xworkoutdvdset.com/">p90x</a>. <a href="http://www.bestmbtshoes.us/">cheap mbt shoes</a>. <a href="http://www.cheap-ed-hardy.com/ed-hardy-tshirts-c-56">ed hardy t shirts</a>. <a href="http://www.vibramfivefingerssale.us/vibram-fivefingers-mens-classic-c-65">vibram fivefingers classic</a>. <a href="http://www.bestmbtshoes.us/MBT_MWalk-c-28-b0">mbt m walk</a>. I thought that many people can like.</p> <p>Thanks for sharing your article. As a sports fan I adore all kinds of sports equipments. I've got <a href="http://www.vibramfivefingerssale.us/">vibram five finger</a>, <a href="http://www.cheap-ed-hardy.com/ed-hardy-men-hoodies-c-17">hardy hoodie</a> and <a href="http://www.vibramfivefingerssale.us/vibram-fivefingers-women-c-68">vibram kso women</a> and <a href="http://www.bestmbtshoes.us/MBT_Sport-c-30-b0">mbt white sport shoes discounts</a>. <a href="http://www.cheap-ed-hardy.com/">cheap ed hardy clothing</a>. <a href="http://www.vibramfivefingerssale.us/vibram-fivefingers-mens-sprint-c-67">vibram five fingers sprint</a> <a href="http://www.bestmbtshoes.us/">discount mbt shoes</a>. I thought that these are good.</p> </div> </div> </div><div class="comment" id="comment_879"><div class='black'> <div class='heading'> <span class='yellow'> <a href="http://www.replica-Luxurybags.com/">Hermes handbags</a> </span> <span class='green'>at 2010-07-05 07:27:55 UTC</span> </div> <div class='body'><p>And, <b><a href=http://www.replica-luxurybags.com/>hermes handbag</a></b> comes with a key set and engraved lock. The markings of <b><a href=http://www.replica-luxurybags.com/hermes-kelly-c-358>Kelly bag</a></b> are embossed, and the designer will never put metal plates on its creations. Finally we need to check the material and the stitching of <b><a href=http://www.replica-luxurybags.com/hermes-kelly-c-358>Kelly bags</a></b> .</p> <p>As the new member in <b><a href=http://www.tiffanyjewellery4u.com/>Tiffany co</a></b> ., Frank Gehry brings a bold and original dynamic to the worlds of fashion and design. <b><a href=http://www.tiffanyjewellery4u.com/tiffany-charms.html>silver charms</a></b> will debut with six distinct jewelry collections. In addition, <b><a href=http://www.tiffanyjewellery4u.com/tiffany-charms.html>Tiffany charms</a></b> will include a selection of tabletop items. In the hands of this master builder of <b><a href=http://www.tiffanyjewellery4u.com/tiffany-charms.html>silver sets</a></b> , precious metals, stones and wood are interpreted in provocative new shapes highlighted with brilliant color, patina and rich grain.</p> </div> </div> </div><div class="comment" id="comment_967"><div class='gray'> <div class='heading'> <span class='yellow'> stfgdsf </span> <span class='green'>at 2010-07-08 01:08:15 UTC</span> </div> <div class='body'><p>designers replicas. <b><a href="http://www.replicassale.com">replica sunglass cheap</a></b> Please bring your circumstance <b><a href="http://www.replicassale.com/replicas-sale/penny-hardaway-shoes.html">wholesale replica Penny Hardaway Shoes</a></b> again look at whole-hog <b><a href="http://www.replicassale.com/replicas-sale/iwc.html">IWC</a></b> models we opine to <b><a href="http://www.replicassale.com/replicas-sale/richard-mille.html">cheap replca Richard Mille</a></b> offer.We lap up essential <b><a href="http://www.replicassale.com/replicas-sale/womens-nike-shox-shoes.html">replica Womens Nike Shox Shoes online store</a></b> for everyone. We are <b><a href="http://www.replicassale.com">replica watches for sale</a></b> downright you will lasciviousness <b><a href="http://www.replicassale.com/replicas-sale/aviator-sunglasses.html">replica Aviator Sunglasses online store</a></b> the conclude estimation o <b><a href="http://www.replicassale.com/replicas-sale/metal-sunglasses.html">Metal Sunglasses</a></b> <b><a href="http://www.replicassale.com/replicas-sale/kids-sunglasses.html">Kids Sunglasses</a></b> <b><a href="http://www.replicassale.com">replica watches wholesale</a></b></p> </div> </div> </div><div class="comment" id="comment_1019"><div class='black'> <div class='heading'> <span class='yellow'> <a href="http://www.rs2guru.com">wedding invites</a> </span> <span class='green'>at 2010-07-09 03:29:46 UTC</span> </div> <div class='body'><p><a href="http://www.wal-land.com">dress up games for girls</a> and begin working to give your doll a new look. You can style the doll with different <a href="http://www.wal-land.com">dress up games</a> to your styling sense. Rs2guru <a href="http://www.rs2guru.com">wedding invitations</a> Department is specialized in wedding invitation designing <a href="http://www.vponsale.co.uk">wedding invitations</a> and <a href="http://www.rs2guru.com/wording/">wedding invitation wording</a> printing, and we provide High quality and reasonable price to you. On our site you can see a wide range of personalized Wedding Invitations. We strive to offer you the best choice of <a href="http://www.vponsale.com/invitations/">wedding invitations</a>.</p> </div> </div> </div><div class="comment" id="comment_1077"><div class='gray'> <div class='heading'> <span class='yellow'> <a href="http://www.linksgift.net/">links of london</a> </span> <span class='green'>at 2010-07-12 09:22:44 UTC</span> </div> <div class='body'><p>Today many companies deal in sterling silver jewellery.<a href="http://www.hitiffanyjewelry.com/">Tiffany Jewellery</a> At first silver is extracted at the <a href="http://www.hitiffanyjewelry.com/">Tiffany Co</a> factory and then shifted to the retail outlets.<a href="http://www.hitiffanyjewelry.com/">Tiffany Rings</a> The sterling silver jewellery wholesale business has become immensely lucrative. <a href="http://www.shoes44.com/">gucci shoes men</a> <a href="http://www.ukmoncler.com/">doudoune moncler</a></p> </div> </div> </div><div class="comment" id="comment_1126"><div class='black'> <div class='heading'> <span class='yellow'> <a href="http://www.mychristianlouboutinshoes.com/">christian louboutin shoes</a> </span> <span class='green'>at 2010-07-15 01:13:01 UTC</span> </div> <div class='body'><p>We offer 2010 new christian louboutin shoes,such as christian louboutin pumps,christian louboutin sandals,christian louboutin boots,just beacuse we love christian louboutin,also we think it will made you be more sexy.IN christian louboutin sale,you can get your luxury christian louboutin shoes at cheap price.<a href="http://www.mychristianlouboutinshoes.com/">christian louboutin shoes</a>(born 1964) is a footwear designer who launched his line of high-end women's shoes in France in 1991.trademark protection of this red sole design.<a href="http://www.mychristianlouboutinshoes.com/">cheap christian louboutin shoes</a><a href="http://www.mychristianlouboutinshoes.com/">louboutin shoes</a><a href="http://www.mychristianlouboutinshoes.com/blog/">christian louboutin shoes on sale</a><a href="http://www.christian-louboutin-sale.us/">christian louboutin sale</a><a href="http://www.uggboots-1.com/index.php">cheap ugg boots</a><a href="http://www.uggboots-1.com/index.php">ugg boots sale</a><a href="http://www.uggboots-1.com/index.php">UGG Classic tall</a> and <a href="http://www.uggboots-1.com/index.php">UGG Classic cardy</a>,<a href="http://www.uggboots-1.com/index.php">UGG Classic short</a>,<a href="http://www.uggboots-1.com/ugg-5815-classic-tall-c-139.html">ugg 5815</a> ,<a href="http://www.uggboots-1.com/ugg-5825-classic-short-c-141.html">ugg 5825</a><a href="http://www.mychristianlouboutinshoes.com/christian-louboutin-shoes-cheap.html">christian louboutin shoes cheap</a></p> </div> </div> </div><div class="comment" id="comment_1500"><div class='gray'> <div class='heading'> <span class='yellow'> <a href="http://www.onsalechristianlouboutin.com">christian louboutin shoes </a> </span> <span class='green'>at 2010-07-25 07:57:05 UTC</span> </div> <div class='body'><p><a href="http://www.echristianlouboutincom.com/" ><b>christian louboutin</b></a> <a href="http://www.echristianlouboutincom.com/"><b>christian louboutin shoes</b></a> <a href="http://www.echristianlouboutincom.com/"><b>christian shoes</b></a> <a href="http://www.echristianlouboutincom.com/"><b>christian louboutin discount</b></a> <a href="http://www.echristianlouboutincom.com/"><b>christian louboutin sale</b></a> <a href="http://www.echristianlouboutincom.com/christian-louboutin-boots-c-1.html"><b>Christian Louboutin Boots</b></a> <a href="http://www.echristianlouboutincom.com/christian-louboutin-pumps-c-2.html"><b>Christian Louboutin Pumps</b></a> <a href="http://www.echristianlouboutincom.com/christian-louboutin-shoes-c-3.html"><b>Christian Louboutin Shoes</b></a> <a href="http://www.echristianlouboutincom.com/christian-louboutin-sandals-c-4.html"><b>Christian Louboutin Sandals</b></a></p> </div> </div> </div><div class="comment" id="comment_1637"><div class='black'> <div class='heading'> <span class='yellow'> <a href="http://bagswell.com">jannylon</a> </span> <span class='green'>at 2010-07-27 07:03:35 UTC</span> </div> <div class='body'><p>We sales <a href=http://www.bagswell.com/>replica handbags</a> for the best prices We specializing <a href=http://www.bagswell.com/>Cheap handbags</a>,<a href=http://www.bagswell.com/>Designer Handbags</a> <a href=http://www.bagswell.com/>Discount handbags</a>,Mens <a href=http://www.gzshijin.com/>seo</a> and Womens <a href=http://www.bagswell.com/>replica bags</a> Looking for Cheap and <a href=http://www.bagswell.com/gucci-bags-c-4.html>Gucci Handbags</a> <a href=http://www.bagswell.com/chanel-bags-chanel-handbags-c-6_11.html>Replica chanel handbag</a> <a href=http://www.bagswell.com/chanel-bags-chanel-handbags-c-6_11.html>chanel handbags</a> <a href=http://www.bagswell.com/gucci-bags-c-4.html>replica Gucci Bags</a> <a href=http://www.linkreplica.com/replica-handbags.html>replica handbags</a> <a href=http://www.linkreplica.com/louis-vuitton.html>Louis Vuitton handbags</a> <a href=http://www.linkreplica.com/>Discount replica handbags</a> <a href=http://www.linkreplica.com/louis-vuitton.html>Louis Vuitton handbags</a> <a href=http://www.bagswatches.com/>Discount designer handbags</a><a href=http://www.bagswatches.com/replica-Louis-Vuitton-handbags.html> Replica louis vuitton handbags</a> and many more designers.Money Back Guarantee. Free Shipping.Offering Cheap <a href=http://www.bagswatches.com/replica-Louis-Vuitton-handbags.html>knock off handbags</a> <a href=http://www.bagswatches.com/>replica handbags</a> <a href=http://www.bagswatches.com/>replica bags</a> <a href=http://www.bagswatches.com/>fake handbags</a> <a href=http://www.bagswatches.com/replica-Louis-Vuitton-handbags.html>Louis Vuitton handbags</a> <a href=http://www.bagswatches.com/replica-Louis-Vuitton-handbags.html>fake Louis Vuitton handbags</a> <a href=http://www.bagswatches.com/replica-Gucci-handbags.html>Gucci handbags</a> <a href=http://www.bagswatches.com/replica-Gucci-handbags.html>replica Gucci handbags</a> <a href=http://www.bagswatches.com/replica-Gucci-handbags.html>fake Gucci handbags</a> <a href=http://www.bagswatches.com/replica-Prada-handbags.html>Prada handbags</a> <a href=http://www.bagswatches.com/replica-Prada-handbags.html>replica Prada handbags</a> <a href=http://www.bagswatches.com/replica-Hermes-handbags.html>replica Hermes handbags</a> <a href=http://www.bagswatches.com/replica-Hermes-handbags.html>replica Hermes bags</a> <a href=http://www.bagswatches.com/replica-Chanel-handbags.html>replica Chanel handbags</a> <a href=http://www.bagswatches.com/replica-Chanel-handbags.html>chanel handbags</a> and other <a href=http://www.bagswatches.com/>Designer Replica handbag</a>s <a href=http://www.bagswatches.com/>Discount handbags</a> on sale handbags <a href=http://www.shopping-replica.com/>replica designer handbags</a> <a href=http://www.shopping-replica.com/replica-Louis-Vuitton.html>replica louis vuitton handbags</a> handbags for sale star handbags AAA <a href=http://www.shopping-replica.com/>Replica Handbags</a> China Supplier, to buy <a href=http://www.linkreplica.com/>replica watches</a> <a href=http://www.linkreplica.com/swiss-replica-watches-c-532.html>best watches</a> buy <a href=http://www.linkreplica.com/>cheap watches</a> <a href=http://www.likereplica.com/>cheap watches</a> cheap <a href=http://www.likereplica.com/>replica watches</a> <a href=http://www.bagswatches.com/>replica watches</a> <a href=http://www.likereplica.com/replica-watches-c-103.html>replica watches</a> free shipping and accept paypal.You can buy the cheapest <a href=http://www.bagswell.com/louis-vuitton-c-1.html>louis vuitton handbags</a>.<a href=http://www.bagswell.com/chanel-bags-c-6.html>chanel Handbags</a> <a href=http://www.bagswell.com/chloe-handbag-c-48.html>chloe handbag</a> <a href=http://www.bagswell.com/balenciaga-handbags-c-53.html>balenciaga Handbags</a> <a href=http://www.bagswell.com/burberry-handbags-c-58.html>Burberry handbags</a> <a href=http://www.bagswell.com/prada-handbags-c-51.html>Prada Handbags</a> <a href=http://www.bagswell.com/miu-miu-handbags-c-54.html>Miu Miu handbags</a> <a href=http://www.bagswell.com/dior-handbags-c-56.html>Dior handbags</a> <a href=http://www.bagswell.com/gucci-bags-c-4.html>Gucci Handbags</a> <a href=http://www.bagswell.com/hermes-handbags-c-41.html>Hermes handbags</a>... <a href=http://www.shopping-replica.com/replica-Louis-Vuitton.html>louis vuitton handbags</a>.<a href=http://www.shopping-replica.com/replica-Chanel.html>chanel Handbags</a> <a href=http://www.shopping-replica.com/replica-Chloe.html>chloe handbags</a> <a href=http://www.shopping-replica.com/replica-Balenciaga.html>balenciaga Handbags</a> <a href=http://www.shopping-replica.com/replica-Burberry.html>Burberry handbags</a> <a href=http://www.shopping-replica.com/replica-Prada.html>Prada Handbags</a> <a href=http://www.shopping-replica.com/replica-MiuMiu.html>Miu Miu handbags</a> <a href=http://www.shopping-replica.com/replica-Dior.html>Dior handbags</a> <a href=http://www.shopping-replica.com/replica-Gucci.html>Gucci Handbags</a> <a href=http://www.shopping-replica.com/replica-Hermes.html>Hermes handbag</a> Online China replica Goods offer cheapest designer <a href=http://www.bagswatches.com/replica-Louis-Vuitton-handbags.html>louis vuitton handbags</a>.<a href=http://www.shopping-replica.com/replica-Chanel.html>chanel Handbags</a> <a href=http://www.bagswatches.com/replica-Chloe-handbags.html>chloe handbags</a> <a href=http://www.bagswatches.com/replica-Balenciaga-handbags.html>balenciaga Handbags</a> <a href=http://www.bagswatches.com/replica-Burberry-handbags.html>Burberry handbags</a> <a href=http://www.bagswatches.com/replica-Prada-handbags.html>Prada Handbags</a> <a href=http://www.bagswatches.com/replica-MiuMiu-handbags.html>Miu Miu handbags</a> <a href=http://www.bagswatches.com/replica-Dior-handbags.html>Dior handbags</a> <a href=http://www.bagswatches.com/replica-Gucci-handbags.html>Gucci Handbags</a>.Online China replica Goods offer cheapest designer <a href=http://www.bagswatches.com/replica-Hermes-handbags.html>Hermes handbag</a> <a href=http://www.bagswatches.com/replica-Swiss-Rolex-watches.html>replica rolex</a> <a href=http://www.linkreplica.com/Swiss-Rolrx.html>rolex replica</a> <a href=http://www.linkreplica.com/Swiss-Rolrx.html>replica rolex</a> <a href=http://www.linkreplica.com/louis-vuitton.html>louis vuitton handbags</a>.<a href=http://www.linkreplica.com/chanel.html>chanel Handbags</a> <a href=http://www.linkreplica.com/balenciaga.html>balenciaga Handbags</a> <a href=http://www.linkreplica.com/burberry.html>Burberry handbags</a> <a href=http://www.linkreplica.com/prada.html>Prada Handbags</a> <a href=http://www.linkreplica.com/miumiu.html>Miu Miu handbags</a> <a href=http://www.linkreplica.com/replica-watches-rolex-watches-c-409_411.html>replica rolex</a> <a href=http://www.linkreplica.com/replica-watches-rolex-watches-c-409_411.html>rolex replica</a> <a href=http://www.linkreplica.com/replica-watches-rolex-watches-c-409_411.html>replica watches</a> .Finest Workmanship,Quality Guaranteed</p> </div> </div> </div><div class="comment" id="comment_1752"><div class='gray'> <div class='heading'> <span class='yellow'> <a href="http://www.edhardyuksale.com">ed hardy</a> </span> <span class='green'>at 2010-07-30 02:46:20 UTC</span> </div> <div class='body'><p><a href=http://www.edhardyuksale.com/>ed hardy</a> show continued in a tone of silliness, and several of Meyers' current and former "Saturday Night Live" cast mates <a href=http://www.asicskicks.com/>asics shoes</a> joined in the fun, including a vuvuzela-playing Will Ferrell and Andy Samberg dressed as Paul the octopus. <a href=http://www.airyeezykicks.com/>air yeezy</a> Angeles made a good showing on a night when sports got the Hollywood treatment. <a href=http://www.airyeezyshoes.org/>nike air yeezy</a> took home the ESPY for best coach, the Lakers' Kobe Bryant won the award for best NBA player <a href=http://www.coachusamall.com/>coach outlet</a> the Galaxy's Landon Donovan won awards for best<a href=http://www.supramenshoes.com/>supra footwear</a> player and best moment in sports, for his winning goal <a href=http://www.af1dunksb.com/>nike dunk</a> the U.S. against Algeria in the World Cup. The New Orleans Saints were the top winners of the evening, <a href=http://www.christianlouboutinice.com/>christian louboutin</a> the award for best team. Quarterback Drew Brees <a href=http://www.visvimshoeshop.com/>visvim sneakers</a> named best male athlete and best NFL player and was saluted <a href=http://www.edhardyukshop.com/>christian audigier</a> best championship performance. The show took on a serious tone with two special awards. <a href=http://www.ghdhotpink.com/green-envy-ghd-iv-styler-p-18.html>green envy ghd</a> Jimmy V Award for Perseverance, in honor of the late college basketball coach Jim Valvano, went to Denver Nuggets Coach George Karl, <a href=http://www.kickseden.com/product4.asp?ID=151>air max lebron james</a> is a survivor of prostate cancer and was diagnosed with neck and throat cancer.</p> </div> </div> </div> <h5 class='center'>post comment</h5> <div class='quiet'> Comments are marked down using Ryan Tomayko's excellent <a href='http://github.com/rtomayko/rdiscount/tree/master'>rdiscount</a> gem, which follows standard markdown conventions. If you don't know markdown, you can learn it using the <a href='http://daringfireball.net/projects/markdown/syntax'>Daring Fireball</a> markdown syntax guide. </div> <div id='commentForm'> <form action="/comments" class="new_comment" id="new_comment" method="post"><div style="margin:0;padding:0;display:inline"><input name="authenticity_token" type="hidden" value="oFWSb8rBk2nZPOLBAmi+4EvHSPiMnyjO7yw0G16WWhs=" /></div> <input id="article_id" name="article_id" type="hidden" value="using-hpricot-to-auto-populate-link-information" /> <table class="formBox"> <tr> <td class="label"> <label for="comment_name">Name</label> </td> <td class="semi"> <input id="comment_name" name="comment[name]" size="30" type="text" /> </td> <td class="required"> required </td> </tr> <tr> <td class="label"> <label for="comment_email">Email</label> </td> <td class="semi"> <input id="comment_email" name="comment[email]" size="30" type="text" /> </td> <td class="required"> required </td> </tr> <tr> <td class="label"> <label for="comment_website">Website</label> </td> <td class="semi"> <input id="comment_website" name="comment[website]" size="30" type="text" /> </td> <td > </td> </tr> <tr> <td class="label"> <label for="comment_body">Comment</label> </td> <td colspan="2"> <textarea cols="40" id="comment_body" name="comment[body]" rows="20"></textarea> </td> </tr> <tr> <td class="label"> <label for="comment_were_you_humon">Were you humon?</label> </td> <td colspan="2"> <script type="text/javascript"> var RecaptchaOptions = "theme : 'blackglass'"; </script> <script type="text/javascript" src="http://api.recaptcha.net/challenge?k=6LeGTggAAAAAADZj7ucrGF-No8q8pimghcN9PT9r"></script> <noscript> <iframe src="http://api.recaptcha.net/noscript?k=6LeGTggAAAAAADZj7ucrGF-No8q8pimghcN9PT9r" height="300" width="500" frameborder="0"></iframe><br/> <textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea> <input type="hidden" name="recaptcha_response_field" value="manual_challenge"></noscript> </td> </tr> <tr> <td > </td> <td class='twospan'> <div class='formSubmit'> <input id="comment_submit" name="commit" type="submit" value="Post Comment" /> </div> </td> </tr> </table> <h6 class='center'><a href="/login">login</a> to post comments without entering your name, email address and recaptcha code each time, or <a href="/register">register</a> if you haven't already done so</h6> </form> </div> <h4 class='center'>markdown basics</h4> <div class='user'> <table> <tr class='gray'> <td>**bold** __bold__</td> <td>[link](http://link.com "link")</td> <td>* unordered list item</td> </tr> <tr class='black'> <td>*italic* _italic_</td> <td>##h2 heading</td> <td>1. ordered list item</td> </tr> <tr class='gray'> <td>> blockquote</td> <td>####h4 heading</td> <td> <code>@ruby</code> </td> </tr> </table> </div> <br /> </div> <div class='black' id='secondary'> <div id='search'><form action="/articles/search" method="post"><div style="margin:0;padding:0;display:inline"><input name="authenticity_token" type="hidden" value="oFWSb8rBk2nZPOLBAmi+4EvHSPiMnyjO7yw0G16WWhs=" /></div> <span class="textFields"> <input id="search_field" name="search" type="text" /> </span> <span class="submit"> <input type="submit" value="Search Articles" /> </span> </form> </div> <div class='partial'> <h4>related articles</h4> <h5> <span class='white'> <a href="/articles/a-lightweight-powerful-search-engine-for-rails">a lightweight, powerful search engine for rails</a> </span> <span class='yellow'> by <a href="/users/mzazaian">Mike Zazaian</a> </span> <span class='green'> at 2009-08-24 21:18:00 UTC </span> </h5> <h5> <span class='white'> <a href="/articles/seo-friendly-urls-for-your-rails-app-with-friendly_id">seo-friendly urls for your rails app with friendly_id</a> </span> <span class='yellow'> by <a href="/users/mzazaian">Mike Zazaian</a> </span> <span class='green'> at 2009-08-07 23:06:00 UTC </span> </h5> <h5> <span class='white'> <a href="/articles/a-whistle-stop-tour-of-syntax-highlighting-and-markdown-solutions-for-rails">a whistle-stop tour of syntax highlighting and markdown solutions for rails</a> </span> <span class='yellow'> by <a href="/users/mzazaian">Mike Zazaian</a> </span> <span class='green'> at 2009-08-14 05:02:03 UTC </span> </h5> <h5> <span class='white'> <a href="/articles/adding-recaptcha-to-comments-in-your-rails-app">adding recaptcha to comments in your rails app</a> </span> <span class='yellow'> by <a href="/users/mzazaian">Mike Zazaian</a> </span> <span class='green'> at 2009-09-15 20:07:38 UTC </span> </h5> <h5> <span class='white'> <a href="/articles/using-bash-aliases-to-simplify-your-existence">using bash aliases to simplify your existence</a> </span> <span class='yellow'> by <a href="/users/mzazaian">Mike Zazaian</a> </span> <span class='green'> at 2009-10-10 15:28:44 UTC </span> </h5> </div> <div class='partial'> <h4>popular articles</h4> <h5> <span class='white'> <a href="/articles/a-whistle-stop-tour-of-syntax-highlighting-and-markdown-solutions-for-rails">A Whistle-Stop Tour of Syntax Highlighting and Markdown Solutions for Rails</a> </span> <span class='yellow'> by <a href="/users/mzazaian">Mike Zazaian</a> </span> <span class='green'> was viewed 3344 times </span> <span class='blue'> <a href="/articles/a-whistle-stop-tour-of-syntax-highlighting-and-markdown-solutions-for-rails#comments">and has 127 comments</a> </span> </h5> <h5> <span class='white'> <a href="/articles/seo-friendly-urls-for-your-rails-app-with-friendly_id">seo-friendly urls for your rails app with friendly_id</a> </span> <span class='yellow'> by <a href="/users/mzazaian">Mike Zazaian</a> </span> <span class='green'> was viewed 2864 times </span> <span class='blue'> <a href="/articles/seo-friendly-urls-for-your-rails-app-with-friendly_id#comments">and has 87 comments</a> </span> </h5> <h5> <span class='white'> <a href="/articles/creating-pretty-urls-from-multiple-attributes-with-friendly_id">Creating Pretty URLs From Multiple Attributes With friendly_id</a> </span> <span class='yellow'> by <a href="/users/mzazaian">Mike Zazaian</a> </span> <span class='green'> was viewed 2286 times </span> <span class='blue'> <a href="/articles/creating-pretty-urls-from-multiple-attributes-with-friendly_id#comments">and has 110 comments</a> </span> </h5> <h5> <span class='white'> <a href="/articles/using-git-submodules-to-manage-plugins-in-rails">Using Git Submodules to Manage Plugins in Rails</a> </span> <span class='yellow'> by <a href="/users/mzazaian">Mike Zazaian</a> </span> <span class='green'> was viewed 2374 times </span> <span class='blue'> <a href="/articles/using-git-submodules-to-manage-plugins-in-rails#comments">and has 73 comments</a> </span> </h5> <h5> <span class='white'> <a href="/articles/how-to-modify-default-setters-and-getters-in-rails-models">How To Modify Default Setters and Getters in Rails Models</a> </span> <span class='yellow'> by <a href="/users/mzazaian">Mike Zazaian</a> </span> <span class='green'> was viewed 2259 times </span> <span class='blue'> <a href="/articles/how-to-modify-default-setters-and-getters-in-rails-models#comments">and has 88 comments</a> </span> </h5> </div> <div class='partial'> <h4>latest links</h4> <h5> <span class='white'> <a href="http://help.github.com/multiple-keys/">Help.GitHub - Multiple SSH keys</a> </span> <span class='green'> The article from github help mirroring this process </span> </h5> <h5> <span class='white'> <a href="http://ozmm.org/">ones zeros majors and minors</a> </span> <span class='green'> ones zeros majors and minors: esoteric adventures in solipsism, by chris wanstrath </span> </h5> <h5> <span class='white'> <a href="http://activescaffold.com/">ActiveScaffold</a> </span> <span class='green'> A Ruby on Rails plugin for dynamic, AJAX CRUD interfaces </span> </h5> </div> <div class='partial'> <h4>latest comments</h4> <h5> <span class='white'> <a href="/articles/the-fastest-way-to-concatenate-strings-and-arrays-in-ruby#comment_1770">The simple and elegant design to attract people’s eyes, ladies and gentlemen who wear the <a href="http://www.herebags.com/lo...</a> </span> <span class='yellow'> by <a href="http://www.herebags.com">replica handbags</a> </span> <span class='blue'> on <a href="/articles/the-fastest-way-to-concatenate-strings-and-arrays-in-ruby">The Fastest Way to Concatenate Strings and Arrays in Ruby</a> </span> </h5> <h5> <span class='white'> <a href="/articles/adding-recaptcha-to-comments-in-your-rails-app#comment_1769"><a href="http://www.monclerjacket.biz" title="canada goose">canada goose</a> <a href="http://www.monclerjacket.biz/canada-goose...</a> </span> <span class='yellow'> by <a href="http://www.monclerjacket.biz">canada goose</a> </span> <span class='blue'> on <a href="/articles/adding-recaptcha-to-comments-in-your-rails-app">Adding reCAPTCHA to Comments in Your Rails App</a> </span> </h5> <h5> <span class='white'> <a href="/articles/adding-recaptcha-to-comments-in-your-rails-app#comment_1768"><a href="http://www.monclerjacket.biz" title="canada goose">canada goose</a> <a href="http://www.monclerjacket.biz/canada-goose...</a> </span> <span class='yellow'> by <a href="http://www.monclerjacket.biz">canada goose</a> </span> <span class='blue'> on <a href="/articles/adding-recaptcha-to-comments-in-your-rails-app">Adding reCAPTCHA to Comments in Your Rails App</a> </span> </h5> </div> </div> <div class='gray' id='tertiary'> <span class='white'></span> <h4> <span class='white'> <a href="/login">login</a> </span> </h4> <div id='miniLogin'> <form action="/session" method="post"><div style="margin:0;padding:0;display:inline"><input name="authenticity_token" type="hidden" value="oFWSb8rBk2nZPOLBAmi+4EvHSPiMnyjO7yw0G16WWhs=" /></div> <div class='textFields'> <label>username</label> <input id="login" name="login" type="text" /> <label>password</label> <input id="password" name="password" type="password" /> </div> <div class='submit'> <input name="commit" type="submit" value="login" /> </div> </form> <span class='yellow'> <a href="/register">register</a> <a href="/activate">activate</a> <a href="/reset">reset</a> </span> </div> <div id='feeds'> <span class='blue'> <h4>feeds</h4> <a href="/articles/feed">articles/rss</a> </span> </div> <h4> <span class='white'> <a href="/topics">topics</a> </span> </h4> <div id='allTopics'> <span class='green'> <a href="/topics/editorial" class="topic">editorial</a> <a href="/topics/templating" class="topic">templating</a> <a href="/topics/plugins" class="topic">plugins</a> <a href="/topics/rails" class="topic">rails</a> <a href="/topics/news" class="topic">news</a> <a href="/topics/syntax" class="topic">syntax</a> <a href="/topics/versioning" class="topic">versioning</a> <a href="/topics/gems" class="topic">gems</a> <a href="/topics/unix" class="topic">unix</a> </span> </div> <div id='staff'> <h4>staff</h4> <span class='yellow'> <div class='role'> editor </div> <div class='user'> <a href="/users/mzazaian">mike zazaian</a> </div> </span> </div> <div id='about'> <h4>about</h4> <span class='blue'> <p> doblock focuses on ruby, rails, and all things that can help ruby and/or rails programmers hone their skills. </p> <p> Techniques, tutorials, news, and even free open-source applications, doblock seeks to fill in the cracks of the ruby/rails blogosphere. </p> <p> <span class='gray'> doblock v. 0.8.22 powered by Rails </span> </p> </span> </div> </div> </div> <div id='footer'> <div class='nav'> <ul id='primary'> <li><a href="/articles" class="whiteActive">articles</a></li> <li><a href="/topics" class="white">topics</a></li> <li><a href="/login" class="white">login</a></li> </ul> </div> </div> <script src="/javascripts/analytics/one.js?1253150651" type="text/javascript"></script> <script src="/javascripts/analytics/two.js?1253150651" type="text/javascript"></script> </body> </html>