libxml-ruby vs nokogiri vs hpricot

Update: Aaron told me that he is going to be re-running the benchmarks this weekend so we’ll get a more complete set of data from the machine that originally ran the tests.

If you’re into parsing XML or HTML with ruby then chances are you’re familiar with the various gems out there for getting the job done.  Lately, there have been a lot of things flying around about which is the fastest and to settle it, Aaron Patterson (author of Nokogiri and Mechanize) wrote a test suite.

After it’s release, RubyInside posted about how the tests showed how fast Nokogiri was compared to Hpricot in this article here: Ruby XML Performance Shootout: Nokogiri vs LibXML vs Hpricot vs REXML.  Later in the day, I saw Why’s posting about the release of Hpricot here: hpricot 0.7 and decided to modify Aaron’s tests to use Hpricot.XML and here are the results:
Read More…

Posted in Comedy, New Stuff, Software Development, ruby at March 18th, 2009. 1 Comment.

you need to write me [updated]

About 20 minutes ago I entered a situation where every time I ran a script on my machine, the only output would be “you need to write me”

Naturally I was a little freaked out.

After retracing my steps over the past hour I remembered I had updated my ruby gems with a good ol “sudo gem update.”  I do it all the time so I didn’t see the cause for concern.  I went and looked at the newly installed gems and saw that there was libxml-ruby-1.0.0.  I browsed inside the gem and saw that it had a bin directory that had a ruby executable in it.  Cute.  Whoever the person is who released that needs to pay super close attention to what they are doing in the future.

Anyhow, I uninstalled the gem and when it asked if I wanted to remove the ruby executable I said yes.  This of course trashed the ruby executable in my /usr/bin.  Luckily I was able to retrieve it from Jay Amster and all was well.  If I was to do things over I’d say not to trash the executable and just delete the gem and all of its files.

Having that broken ruby executable in my path devastated my system though.  Half of my Textmate scripts no longer worked, none of my rails apps would execute, etc.  It was awful.  Thankfully I was able to figure it out quickly and hopefully if you run a search for “you need to write me” then you’ll stumble upon this post and know what to do to fix your machine.

UPDATE:

It would appear as though this problem is now resolved.  Maybe I got a bad install of the gem?  Maybe it was just a fluke?  Who knows?  It appears safe to install the latest libxml-ruby now though.

Posted in ruby at March 6th, 2009. No Comments.

Ruby String#Nameize Revised

This morning, Kevin Glowacz (@kevinglowacz) replied to me a few times on Twitter about Ruby String#Nameize class extension I had posted a while back.  I had done some work to it after posting it here.  Kevin also asked me a few questions about oddities that were in it that have since been resolved.  So thanks to his prodding, you get a slightly updated version…

The only real “feature” is that it will now handle full names just fine. Otherwise, the rest of the stuff was mostly performance related.  Here it is:

class String
  # Extension of the string class to properly handle camel names
  def nameize
    if self.match(/ /)
      # If the name has a space in it, we gotta run the parts through the nameizer.
      name = self.split(' ').each { |part| part.nameize! }.join(' ')
      return name
    elsif self.match(/^[A-Z]/)
      # If they took the time to capitalize their name then let's just jump out.
      return self
    else
      # If there are no spaces and there is no prior capitalization then let's downcase the whole thing.
      name = self.downcase
    end
    # Let's now assume that they were lazy...
    return case
    when name.match(/^mac/)
      name.gsub(/^mac/, "").capitalize.insert(0, "Mac")
    when name.match(/^mc/)
      name.gsub(/^mc/, "").capitalize.insert(0, "Mc")
    when name.match(/^o\'/)
      name.split("'").each{ |piece| piece.capitalize! }.join("'")
    else
      name.capitalize # Basically if the name is a first name or it's not Irish then capitalize it.
    end
  end

  def nameize!
    replace nameize # BANG!
  end

end

As always - question, comments, suggestions - shoot me an email, leave a comment, or hit me on Twitter (@PatrickTulskie).

Posted in Code, Software Development, ruby at December 30th, 2008. 2 Comments.

Every Friday we have our code reviews at BeenVerified and it is definitely a non-trivial event.  Our development team looks through the code all together and offers suggestions and ways to improve what the creator deems near-complete code.  Code reviews have become my favorite part of team based development because they offer me such a badass opportunity to learn more.  Everyone looks a problem differently and so getting insight from other people is huge because you might not consider all of your options when you’re knee deep in 1000 lines of ruby, CSS, and js all at once.

Yeah it’s great, except this Friday it didn’t happen.  Thanksgiving weekend happened instead so we pushed it to Monday.  Being the silly goose I am, I decided to get a new Macbook on Black Friday.  I restored my stuff from Time Machine, installed my Ruby Gems, and thought all was well.  Monday morning, my turn to present code came up and there was a problem with screen sharing.  Crap.  All of my code is in a git branch that is not pushed to a server yet and the time it would have taken to get to a state where we could present it from another machine would have been too much so we postponed my review until my screen sharing would work.  This was most displeasing to me. Read More…

Posted in Code, Software Development, Uncategorized, ruby at December 3rd, 2008. No Comments.

Leopard and MySQL Gem

Those of you doing rails development work on Leopard with MySQL have probably seen this error message when starting your app:

WARNING: You’re using the Ruby-based MySQL library that ships with Rails. This library is not suited for production. Please install the C-based MySQL library instead (gem install mysql).

Normally I don’t care, but I figured since I was doing some cleanup today and getting things ready to move on to a longer term it might be good to have a properly working MySQL gem.  I like to run with a system that is close to what we run production.  The closer you get, the less surprises you have when you push it live.

Read More…

Posted in Code, Software Development, Uncategorized, ruby at November 6th, 2008. 2 Comments.

The Tie Breaker [Updated]

I have this disturbing lack of confidence in both presidential candidates.  I don’t really want either of them.  Today I was trying to decide who to vote for because, well, it is election day.  I was walking into the office from lunch when it dawned on me: the best way to pick a president is based on their website.

Presidential Candidate Websites.

Shock and horror came over me as I scanned their websites.  There was stuff all over the place, explosive gradients and backgrounds that simply don’t jive.  Youtube videos are injected in every nook and cranny.  Since both websites are full of crap I don’t fell like reading or watching, I thought that I’d go a step further and do a good ol’ W3C Markup Validation on them.  The results were astounding to say the least.

John McCain: 171 Errors, 46 Warnings (217 problems)
Source: W3C

Barack Obama: 220 Errors, 37 Warnings (257 problems)
Source: W3C

You would think that with the Democratic party doing anything and everything to get Barack all over the media, news, magazines, to the point where I check under my bed at night to make sure he’s not there, they would have made sure his website was W3C compliant.  If he wins, what does that say about their concern for web standards.  It makes his “net neutrality” talks sound like complete crap.  McCain’s site is not much better than Obama’s but the fact is that McCain’s site is better.  Winning is winning.

You’d think that my selection process would be over, but you would be wrong.

VP Candidates.

I went to JoeBiden.com and SarahPalin.com and both were serious let downs.  Biden freeloads off of Obama’s website.  Palin’s website says “This space intentionally left blank.”  Serious disappointment.  Not even a picture of Palin for me to hang up on the wall of my gun locker.  Biden too… dude what’s up with that?  You gotta have Obama carry you through the whole damn election?  Complete rubbish from both the elephant and the ass.

For giggles, I ran ‘em through anyway…

Sarah Palin: 5 Errors, 0 Warnings

Joe Biden: 72 Errors, 29 Warnings

…and let me tell you, I did giggle quite a bit.

Because of how atrocious both VP candidates’ sites are, I won’t be including them in my decision.  Their awfulness cancels each other out.  If you wanted to play a numbers game though, Biden’s piggybacking on Obama’s site does more hurt than good.

The Tie Breaker.

Don’t listen to my drivel.  This blog post is balderdash.  You shouldn’t judge your presidential candidate based on how compliant their website is with W3C standards, even if I am.  When you don’t like either candidate, you need to pick one small issue that you can judge the candidates on go from there.  That’s the tie breaker.  Could be something as lofty as religious beliefs or something as trivial as who has a better choice of neck ties.

Fact of the matter is, you need to go out and vote, no matter how irrational and illogical your selection process might be.

Update

Just tested Change.gov and I’m slightly more impressed.  Seems like since Obama is now president-elect he is able to rocket past anything McCain could ever compose with a WYSIWYG with a cup of coffee.  He has created quite a website that is pretty damn compliant.

Change.gov: 20 Errors, 3 Warning

This makes me feel much better, because the one thing that keeps me up at night is web standards.  Seems like we’re getting much closer to changing.

Posted in Opinion at November 4th, 2008. No Comments.

String#Nameize

This morning we had an email from someone who wanted us to capitalize their name because they had not done it at signup.  That’s fine and all, but this is one of those things we’re going to see again.  Normally you’d just slap a .capitalize on the string and call it a day.  Unfortunately with Irish names, you run into a problem because capitalize doesn’t capitalize those types of names properly.  I wrote a quick function to extend the String class in Ruby that will help get around this problem.

class String
  # Extension of the string class to properly handle camel names
  # Should be used on pieces of names, not full names.
  def nameize
    # If they took the time to capitalize their name then let's just jump out
    if self.match(/\A[A-Z]/)
      return self
    else
      name = self.downcase
    end
    # Let's now assume that they were lazy...
    return case
    when name.match(/^mac/)
      name.capitalize.gsub(/Mac/, "").capitalize.insert(0, "Mac")
    when name.match(/^mc/)
      name.capitalize.gsub(/Mc/, "").capitalize.insert(0, "Mc")
    when name.match(/^o\'/)
      name.split("'").each{ |piece| piece.capitalize! }.join("'")
    else
      name.capitalize
    end
  end
end

I know it’s not perfect, but it should handle most oddly capitalized names.  Let me know what you think in the comments or on Twitter or whatever and definitely give me any changes you think should be in there.

Posted in Code, Software Development, ruby at October 24th, 2008. No Comments.

The Identity Landscape

The other day, I noticed something that sort of pertained to what I wrote a few months ago about killing off JiveMasterT.  I see a lot of people doing this, albeit, subconsciously.  I’m not sure when this change in mentality began and I believe I was actually late to the party.  What follows here is what I think happened.

Over the past ten years, the way that people identify themselves on the internet has changed drastically.  It’s not quite obvious because the change was very gradual and it has not totally affected every area of the internet.  Despite this, it definitely happened.  It’s almost like when your girlfriend asks you if you think she’s lost weight.  It happened so gradually you didn’t notice but when asked - you notice.  There was a time when someone could jump onto IRC and chat with their friends using a username that had varying value.  The username could be thrown away if its reputation faltered and it could be retained if it had meaning and significance to those that interacted with it.

Read More…

Posted in Opinion, Social Media at September 13th, 2008. No Comments.

How Rails Saved Me Last Week

The night time, it was great.  Air was cool, had just gone on a nice jog with my girlfriend, and I was quite content with everything.  Being that my girlfriend has my health in my best interest, she decided to give me some cereal to take home with me.  I walk out to my car in my running shorts that have no pockets and I’m half juggling my clothes, laptop case, shoes, cereal, and… my Blackberry.


def for_the_record
running_shorts != skin_tight
end

I do what I can, placing my blackberry on the roof of my car, get everything inside the car and start driving home.  I get about half way there and…

Read More…

Posted in Uncategorized at August 27th, 2008. No Comments.

PatrickTulskie - Now More Mobile!

If you read my site from your Blackberry or iPhone then try pointing your browser at http://m.patricktulskie.com

This is powered by Mobi which basically takes the RSS feed from my site and parses it into a normally readable page.  This works pretty good on iPhones and Blackberries but I would imagine that it will be just fine on even your normal cellphone.  It took me like 1 minute to setup my site so if you’ve always wanted the m.yourdomain.com then here is an easy way for you to do it.

I think I might need to write some logic in the back end to redirect viewers to the mobile site if I detect they are browsing from a mobile browser.  Hmm.  That’s a post for another time I suppose.

Please note: I am not affiliated with this service at all.

Posted in Blog News, New Stuff at August 24th, 2008. No Comments.