iPhone Contact Synch Troubleshooting

I recently undertook a (failed) journey into synching my Gmail contacts with my Address Book. The end result was much annoyance, followed by a day (ok probably 20 minutes) of cleanup to get my list back to normal. FINE. The cleanup got done – I re-synched with my iPhone and viola: contacts restored to normal… or were they?

10 minutes later I received a text from someone not in my contacts list. Upon further inspection, it was a good friend of mine (who I frequently trade messages with) — what the heck? His number isn’t in my address book?

A quick check of my laptop revealed that he was still there but wasn’t properly being synched to my phone. It wasn’t just him – 25ish contacts were mysteriously not showing up properly. Editing individual entries and resynching got the job done but finding these 25 people was really getting annoying – I needed a truer solution.

The winner:
iSynch -> Preferences -> Reset Sync History

isync

That, plus one more “synch” through iTunes – and I was back on track.  Hope that helps if you’re in that same boat!

Leave a comment

Filed under hardware, Utility

Feel better about your body, with Readability

I didn’t think much about using Readability… until I came upon this guy today (click for full size at own risk):

gross

Much much better.
perty

Ah, what can be prettier than a screen full of baseball stat projections!  The print is a bit small but that’s by choice: make sure to play with the settings when you grab this thing.

1 Comment

Filed under Recommended Sites, Usability

Baseball Draft

Ah yes, it’s that wonderful time of year again: fantasy baseball time.  Anyone who plays fantasy sports can tell you that other than getting a check for winning your league (something I would know nothing about), the best part of the season is the draft.

My fantasy draft preparation always involves the creation of a spreadsheet.  This nugget of gold will start with ratings and stats from various sites and sources before getting my own personal notes, organization, and shuffling (aka “messing it up”).  and what kind of card-carrying software engineer would do such a compilation by hand…

My basic strategy for compiling this sucker this year:

  1. Scrape some stats and rankings from a few popular sites and dump them locally.
  2. Load the stats from local, merge em, and kick out a csv.
  3. Mess with stuff in the spreadsheet.
  4. Win millions.

Scraping

I’ve used hpricot in the past but wanted a bit of a refresher — Man, this thing makes this task nice and easy.  Most of the sites have a fairly sane markup scheme for the tables they store players data in, so it’s normally as simple as (this is Ruby btw):

doc = Hpricot(open(url))
players = doc.search(".playerDataRow")
players.each do |player|
  meta = player.search("td .playerMeta")
  stats = player.search("td .playerStats")
  < do stuff >
end

 

Update: Here are a couple example files (they should be .rb files, but are docs to make WordPress happy)


Yahoo Parser

Something to invoke the parser

Local Storage

Last year, I wrote this as a single script (scrape -> csv). Things got hairy when I needed to tweak the merger and thus had to re-run the whole thing (annoying) or hack it to run only a portion… and the same portion on each site (annoying). So, this year I got a little smart and wanted to dump the scrape results locally.

I fully intended to evaluate a few options here but as it turns out, the first try was just dead simple and worked perfectly: yaml. My scrapers each end up with a couple Arrays: one for hitters and one for pitchers. Each entry is a Hash of player data. I considered skipping the Array here but didn’t want to have the logic for name collisions in the scraper.

How hard was it to write my +player_data+ Hash to yaml?

YAML.dump(player_data, File.open(File.dirname(__FILE__) + "/yaml/" + filename, "w"))

Merging the scrape sources

This is a separate script here now…

Resurrecting the player data proved as simple as storing it in the first place.

YAML.load(File.open(File.dirname(__FILE__) + "/yaml/" + filename))

First pass I just wanted to merge based on player names – ignoring the imperfections that surely come with that… I was pleasantly surprised at how well things actually came out. I wrote a little throwaway script (as if this whole thing isn’t throwaway) to tell me how much of a problem I actually have. Basically: how many players in the top 400 of any site don’t have a match from the other sites? The answer was basically: a lot of Latin guys and a few others.

So, one problem I had was character sets used in the Latin player names. This is an area where “you’re going to throw this away” came into play: I just grabbed the few codes that I was having trouble with and regex’d to replace them with their friendlier counterparts. This is now on my list of “things to figure out how to do right”.

That out of the way, I re-ran and found that I really only had problems with about 20 guys. People with names like “Mike Smith”, that were “Michael Smith” in the other set. Here again: cheated. 20 guys? I can handle typing 20 names instead of figuring this one out, so I just modified the yaml manually here (this immediately breaks down if I have to re-run the scraper, but… I didn’t).

After determining which of the dumped data I wanted to keep (and which site could trump the others when they both had something like HRs), I created my csv with FasterCSV and I was rockin’.

In the spreadsheet

At this point, I was realizing that I should have created some new fields in that script… maybe look for things like big differences between sources (why does Y! think this guy is #20 and ESPN thinks he’s #100?) or even just: what’s the average of all the sites scraped. I was enamored with my spreadsheet though and haven’t had to been able to work with formulas in spreadsheets since my consulting-at-AmFam days, so I thought I’d give it a spin… and was quickly reminded of how easy they make it… to bash your head against the wall:

=IF(AND(P13="n/a";F13="");M13;IF(P13="n/a";(M13+F13)/2;IF(F13="";(M13+P13)/2;(M13+P13+F13)/3)))

2 Comments

Filed under Ruby

Gmail Game Changer

I’ve been a happy gmail user for 4+ years now.  The story of why I like it is incredibly simple: It allowed me to throw away my email filing cabinet and replace it with “just search”.  It really doesn’t sound like a huge deal but it’s basically given me a personal secretary for my correspondence.  I don’t care what filing cabinet you stored the memo in: just find it!  … and you have 1.25 seconds.

But while that’s the real story, the reason I’m writing is I finally dedicated 15 seconds to actually clicking on the “lab” icon to check out what kind of features they had to offer.  And there it was.  Queue the bright light and the “heavenly sound”….

Send & Archive

Every once in a while you find a feature in a product that makes you say “hey, I bet these guys actually use this product themselves”.

1 Comment

Filed under Recommended Sites, Usability

Drop Box

You can’t give someone a digital picture frame for Christmas without filling it up with a starter set of pictures.  I mean, you can… but you’ve given them the present of having to do some up-front work.  So, I set out early this month to grab pics of the family, some scenic overlooks we’ve bumped into, and maybe a few other miscelaneous shots to get Mom’s Christmas present ready.

It takes a couple hour to get a good set of 100-150.  I need to sort through my collection, head out to my brother’s Flickr account, try some friends accounts, and just generally “gather”.

After having DropBox recommended by a few friends, I think we may be on to something that not only makes the process simpler – the resulting collection is much higher quality as well.

The premise is pretty simple: you get a magic folder that looks to be almost the same as any other folder on your machine, but DropBox is keeping it in sync with it’s remote storage location: Amazon S3.  So, it’s obviously handy for just backing things up, but it doesn’t end there.  It makes it simple to share.  I share a directory with my parents, and my sister-in-law and immediately we all can put in our good/new pics and immediately have them broadcast to everyone else.

The strongest point of DropBox though is the Python-based client.  It’s incredibly intuitive – just drop things in and it’ll take care of business.  Looks just like a “real folder” to anyone who is used to any flavor of Windows.  No worries about telling it when to synch, easy visual indicators on whether it’s actively working on anything.  It’s just really real nice.

Dead simple and a great solution to a common problem.  It’s free for the first 2GB, so take the tour here.

Leave a comment

Filed under Recommended Sites

Web Development Project Estimator

A couple friends of mine, Matt Everson of Astuteo and Todd Lekan, have gone in together to create a Web Development Project Estimator.

It’s really intuitive, well designed, and implemented in a very clean way.  Great work guys!

astuteo-calc

Leave a comment

Filed under Recommended Sites

New Tunes

Looking for new music?  Something that normally may not normally be on your radar?

newtunes

newtunes.com has launched and is open for business.  The beta label is still on so there may be some bumps and bruises to be had but it should definitely be checked out.

And while you’re new-tunesing, add Music Streaker to your RSS reader.  The blog provides much more than NewTunes updates (although you’ll get that too) and is run by my friend Jon Friesch.

Leave a comment

Filed under Recommended Sites