header image
 

Bookmarks for January 22nd

How Not To Have To Right-Click a Hundred Photos

I just published my first post on the Redfin Developers’ blog: How Not To Have To Right-Click a Hundred Photos.

And, no, don’t worry.  I’m not switching back to the light side from the PM dark side.  I just had to work some old muscles again.

 

Cleaning Up Behind Skitch

I’ve gotten hooked on Skitch, a screen capture application that was bought byEvernote recently.  It’s been a handy addition to my day-to-day toolset.

However, there was one thing about the Mac version of Skitch that drove me nuts:  it saved copies of every screen grab in my Pictures folder (and there’s currently no way archive or delete them automatically.  This means that my Pictures folder was getting literred with random screengrabs that I didn’t need anymore.

Since it wasn’t looking like that feature was coming any time soon, I decided to work around it.  I wrote a short Applescript app that cleans up the history folder when run. It moves any images older than 3 days to a “HoldForDelete” folder and it deletes any files in the “HoldForDelete” folder that are older than 7 days.  (Feel free to edit the timeframes if you want something different.).

I’ve uploaded the app in case anyone else wants to use it.  I just run it on a preset schedule so that it’s constantly cleaning out that folder.

Download:  CleanOutSkitchHistoryFolder.app.zip (27kb)

If you run into bugs or issues with the app, please let me know.  I’ll try to fix it if I can.  Let me know if you use it too; that’ll motivate me to do more of this!)

Bookmarks for December 4th

  • Plex Media Center & Server for OS X, iOS, Roku – I discovered Plex today and, so far, couldn't be happier with it. You run a server on one machine and then any computer, iPhone, iPad or Roku can access any of the TV, movie and music files from that server.

Bookmarks for November 3rd

  • How to Read Body Language to Reveal the Underlying Truth in Almost Any Situation – “In this post, we’re going to take a look at three common situations in which non-verbal cues are especially important—detecting lies, going on a date, and interviewing for a job—then explain how to interpret body language more accurately so that you can read between the lines when a person’s words aren’t necessarily conveying the way that they honestly feel.”
  • How to Enable Multitasking Gestures and Display Mirroring on the iPad 1 (Without Jailbreaking)- Haven’t tried this yet, but I have wanted mirroring for Airplay on my iPad. Maybe I’ll give it a shot.”This hack comes from a user called d.B. in the modmyi forums, who modified the jailbreaking tool redsn0w to do just one thing: Enable multitouch gestures and mirroring. Despite what the app says, no jailbreaking is actually happening. redsn0w is just tweaking a few settings on your iPad so gestures and mirroring are enabled.”

Bookmarks for September 12th through October 23rd

Bookmarks for September 10th

Google Voice, Android and Sprint: Nice Integration, But Not Without Hiccups

One of our latest projects at work is on Android, the mobile OS powered by Google. However, as my last post probably pointed out, I’m a pretty avid iPhone user but that also meant I’d never dabbled with Android before. I don’t really designing software for unfamiliar uses, so I asked around to find an Android phone I could borrow for a while. Fortunately, our IT group had one already activated with 3G service on Sprint that I could have for a few months.

Goal: Submerge myself in Android; Live as an Android User

To really get enveloped in how the software and applications behave on the platform, I wanted to live as just an Android user for a few months. That’s the best way I find I learn deeply about a piece of technology. But I really, really did not want to carry two phones around (my iPhone and my Android phone). Since everyone already had my iPhone number, and not my new Android/Sprint number, I’d have to carry both unless I could find a solution.

Failure #1: Forward everything from my AT&T iPhone to my Android phone for a few months

Turns out you just can’t do it right now. I googled long and hard to find any hint of a solution that might work. We’re talking I was looking at answers on pages 33, 34 and beyond in the Google results.

You can:

  • Setup your AT&T service and iPhone to forward all your phone calls to another number

You cannot:

  • Setup your AT&T service and iPhone to forward all your text messages to another number.

Nope, really, really you can’t. No matter what GSM codes you punch in, AT&T doesn’t support them. I went through every SMS-related app available in Cydia for jailbroken iPhones thinking for sure someone has solved this already. Nope. Really, nada zip zero.

I’m not totally clear on all the details, but I now understand it: iOS 4 (the software that iPhone runs today) does not allow realtime application access to the text message database. Without an API from Apple or a hack to access the messaging database file directly, it isn’t possible to write an application to do what I wanted.

So, that was the end of that plan. Living with two phones was my only solution.

New Goal: Make Calls from the Android phone via Google Voice

I already have three or four different phones numbers that I can be reached on: home phone (Vonage), work, my iPhone and a Google Voice number. (BTW, if you haven’t tried out Google Voice, it’s pretty impressive for what it does. I love that I can text and reply to texts from an application on my Mac instead of on the iPhone’s little touchscreen keys.) Giving everyone yet another number to reach me on the Android phone seemed pointless, especially if I’m only going to use it for a couple months. So I figured I’d just setup Google Voice to forward everything to that phone and I’d figure out how to make calls from Google Voice on it. That way when I called someone from the Android phone, at least they’d know it’s me calling.

Failure #2: Unable to Figure Out Making GV Calls on Android

I’ll make this short: if this was possible, it was more effort than worth it. Initially my Android phone didn’t have cell phone service, just wi-fi. So I was trying to find a solution where I could use Google Voice powered apps on wi-fi to survive.

Solutions I tried or checked out:

  • Google Voice app: it doesn’t directly make calls, it calls your Android phone number and then calls the person you’re trying to reach. I was worried this would still show the wrong numbers to other callers. It would allow me to send text messages to others, but only if I was running the application, not from the native SMS client. Still it was close.
  • Sipdroid: had some of the features I was looking for, but nearly impossible to get configured. You have to go create an account on http://www.sipgate.com/, then get the right parameters set and more. Maybe it’d have worked, but I gave up.
  • Voice Plus: had some of the features, but text messages still wouldn’t really work like I wanted.

None of these really had the full set of integration I wanted.
Since then, there’s one that’s been released that might actually have done the trick: GrooVe IP.  It seems like it might meet some of my requirements, but I never tried it out.

Success #1: Google Voice integrates with Sprint

After all that mucking about, our IT group was able to upgrade my Android phone to include Sprint 3G service (not just wi-fi), so I could test our app on 3G speeds more like our customers ultimately will. (Thanks IT!)

Even better news was Google and Sprint announcing direct integration of GV on Sprint phones. I had thought this was just going to be the same sort of Google Voice apps on the phone, but it was actually was much more slick.

GoogeVoiceSprintFeatures.png

Two benefits for what I was trying to do:

  • If you link your Google voice number to your Sprint phone, all calls and text messages that you send from the phone will appear to the recipient as your Google Voice number.
  • All messages and calls to your Google Voice number can be auto-forwarded to your Sprint phone.

Great! While this wouldn’t allow me to live with just one phone for months, it did mean I could mostly survive on the Android. I’d just have to check text messages on my iPhone occasionally.

This was super easy to setup and worked pretty much as advertised. (MMS messages still show your Sprint phone #, but I don’t really use MMS that much.) If you’re a Google Voice user already and getting a Sprint phone, I’d definitely consider using this.


Months Fly by Living on Android

For the next couple months, I used the Android phone as often as possible and really lived with it. What I have to say about Android is this: it’s pretty damn good. iPhone vs. Android really is Mac vs. Windows all over again, but this time with Google playing the Microsoft role.

  • iPhone is simple to use with a nice clean user interface and an App Store with more choices than you really need, but you can only have one exact phone hardware design.
  • Android is a little more clunky in the user experience, but you can pretty much do anything you’d want. And with HTC, Motorola and everyone else making Android phones now, you can get any hardware style you want on pretty much any carrier you want. Android’s notifications and their home screen widgets are great features iPhone doesn’t have yet. (I think they’re both rumored for iOS 5 this fall though.)

If you don’t know Android really, here’s an example of a themed version of the home screen showing weather and time widgets:

ahome-mac-os-x-theme.jpg

(Picture courtesy Android Tapp)

There are widgets for showing your Facebook or Twitter feed, news headlines, etc etc. It’s pretty handy, but does make me wonder how much slower it makes the phone or if it sucks the battery refreshing all that network information.


OK, Time to Give the Android Phone Back to Work…

Our dev team could use another phone with 3G service to do some final network speed & latency testing on our app, so it was time to part with the Android. All I should need to do is 2 easy steps:

  1. Disable the Google Voice / Sprint integration in Google Voice settings.
  2. Factory reset the phone

Well, of course, it didn’t quite end up being that straightforward.

Failure #3: Sprint and GV Easy Setup, But Not Easy to Remove

When I logged into Google Voice, I could see the Sprint phone in the settings (click Voice Settings -> Phones). Here’s what it showed:
SprintPhoneInGV.png

So I clicked Disable. I got a confirmation dialog, said yes and I’m sure and…. doh:

UnableToDisable.png

Fail.

Side note for any Google Voice PM manages to stumble across this post, 4 user-experience suggestions:
1. If you’re going to tell me to contact Sprint, give me some way to do that, either a website link or phone number would do.
2. Why tease me with a “Yes, disable this phone” button? If I press it, all I get is the same frustration error to call Sprint.
3. The help link takes to me a page about activating Google Voice for my Sprint number, not deactivating. Contextual help like this should be more accurate than that. Go to
this page instead.
4. Check your grammar when you write messages even for errors. (“cannot be disable”)

Google’s help page on the topic (once I finally found it) wasn’t very helpful. All it described was the steps I just took above. There are lots of Google Voice forums posts on the topic at http://www.google.com/support/voice/bin/search.py?query=disable+google+voice+sprint+more:help_center&forum=1, but none seemed to really give steps to fix the problem.

So off to Sprint I went. Most of Sprint’s website forces you to log into your account before you can do anything, but since it’s IT’s phone, I don’t know the account info. After some digging, I finally found the Sprint phone number directory at www.sprint.com/contactus/?ECID=vanity:contact. In the US, call 888-211-4727. Make make sure to do it from a phone other than your Android as they’ll need to change settings and call the Android phone while you’re talking to them.

Success #2: Sprint Disconnects GV Integration on their Side.

The Sprint service rep knew exactly what I was trying to do and how to fix it. I was literally on the phone for less than 5 minutes and he had the integration disabled. Making calls or sending texts from the Android now show the IT phone number that the phone came with again. Success!  Kudos to Sprint tech support; I’m not sure I’ve had such a service call that solved my problem so quickly and easily.

Well, mostly solved…I logged back into Google Voice and checked it’s settings. It still shows:

SprintPhoneInGV.png

So Sprint did their part, but Google Voice doesn’t apparently know that Sprint has already disconnected it.

I have no idea how long it will take for their two systems to get back in sync with on other. Clicking Disable just repeats the same “Google Voice cannot be disable the Sprint integration on this phone.” Rather than wait or risk that my GV calls still get send to that phone, I manually disabled all the available settings for that phone in Google Voice’s settings like this:

SetAllToDisable.png

Disabling all those features should prevent any texts or calls getting forwarded to that phone anymore. Or so I hope.

I suppose I could try deleting the phone completely from my list of Phones in Google Voice, but I’m afraid that might break things further. So for now, I can live with it there, but inactive.

Done: Reset the phone and it’s ready to hand off.

After that, I just had to factory reset the Android phone. Just a couple clicks in the Settings control panel and all my personal data was wiped clean. It’s all set to hand off either back to IT or hopefully to our dev team in San Francisco.

Was it really worth all that headache?

Believe it or not, I think this was all absolutely worth it. I was able to learn a new mobile OS platform (I’m a phone junkie if you couldn’t tell), learned more about Google Voice’s do’s and don’ts, and got to test our app as planned. I even managed to give some decent user feedback to the app team. I’m still more interested in the upcoming iOS5 than switching to an Android phone, but I’m definitely open to Android in the future. It’s got some promise and is a much, much powerful and easy to use experience than I had expected.

As with my previous post about iPhone jailbreaking, I wrote this up in the hope that someone also frustrated trying to decouple Sprint and Google Voice can save the time I spent. Short answer: Call Sprint — that’s really the only way to get it fixed right now.

Once Google and Sprint have really fixed this problem so that the Disable link actually works, I’d love to know that so I can post an update. Of course, also let me know if I something I describe didn’t work out for you or if it did!

 



Jailbreaking an iPhone 4: Lessons Learned

Sometimes you wonder if a project was worth it.  Upgrading my jailbroken iPhone turned out to be one those projects.

I’d previously upgraded iPhone 4 to a jailbroken iOS 4.3.2 via  PwnageTool.  I remember there were one or two tricks that I had to figure out, but it was otherwise very straightforward (especially since I’m not carrier unlocking it.)  Recently, Apple released 4.3.3 to address complaints it tracked too much of your whereabouts by logging wifi points in that area.

I really didn’t feel impelled to have this only-slightly less big-brothery fix.  However, iTunes browbeat me into wanting to upgrade by incessantly asking me to do so every time I synced the phone.  This weekend I decided to finally do it, figuring my phone would be down for at most an hour.  That turned out to be optimistic.

The 4.3.3 upgrade

I downloaded the latest PwnageTool and Apple’s iOS 4.3.3 firmware for iPhone.  I ran through the PwnageTool expert mode and generated my new ISFW file.  (If you’re already lost as to what I’m talking about,  iClarified.com has a great post on HowTo Jailbreak an iPhone with PwnageTool.)  ISFW generated, iPhone in DFU mode — should be all set.

I told iTunes to restore the iPhone with the jailbroken ISFW file and off it went… until…

Failure #1:  iTunes failed the restore with error 1601 (or sometimes 21)

So off to fix it…

  • The first couple posts I found on that error said if you’re upgrading a jailbroken phone to another jailbroken version, you don’t need to be in DFU mode, you can just do a restore.   That didn’t fix it.
  • The next set of solutions I read all pointed to iTunes being the problem (including Apple’s support site) and that reinstalling iTunes and the Mobile Devices support would solve it.  Apple has a KB article on how to do that.   That didn’t fix it.
  • The next set of solutions said to plug the phone directly into the Mac instead of a USB hub.  I had been using the USB port on my Apple monitor; the same one port & cable I use to sync everyday.   So I plugged the phone it to a USB port on the front of my Mac.  Viola! No more error 1601.

iTunes happily installed the new jailbroken software on the phone and I was good to go.

Or so I thought.

Failure #2: No Service?

My freshly minted iPhone 4 with 4.3.3 installed only was getting 1 bar of signal strength in my home office.  I normally have full bars.  The other clue there was a problem was that the AT&T and 3G indicators weren’t showing up either.

Argh.  Now I’ve got the new software, but lost my carrier service.  Not a good tradeoff.

Clearly I had to get that fixed right away.  So I googled for “iPhone jailbreak 1 bar service”:

  • It’s a common problem apparently and nearly all the hits pointed at ultrasn0w issues.  So I launched Cydia on my phone and installed the latest ultrasn0w.  Didn’t fix it.
  • Found a bunch of posts all talking about an “ultrasn0w fixer” app that Cydia released for this issue.   Followed those steps, but never found the fixer application they were talking about.  (I realized later that it was unnecessary since the version of ultrasn0w I had originally installed already contained that fix.)
  • Since I couldn’t find the fixer app everyone pointed to, I found someone saying you can go back to ultrasn0w 1.2 which means copying the bits to your phone manually in a way that Cydia will autoinstall it on device boot.  iClarified has good instructions on how put that file in the right place.  Did it, rebooted, verified Cydia had installed it correctly,  but  – insert wah wah waaaaah sound here — it didn’t fix the signal problem.
  • I tried a bunch of other solutions I found but I don’t remember what they were.  Suffice to say, none of them helped.  (Just to highlight my frustration level: at this point I have been at it for about four hours and still have a basically dead phone.)
  • I found a comment that said “Did you have pwnage tool hacktivate your phone? I can’t remember the exact steps, but if you use pwnage tool but are on AT&T, you have to uncheck the box that asks if you want pwnage tool to activate (hacktivate) your phone. If you leave this box checked, your phone won’t get activated on ATT.”   Well, that my friends, turned out to be the magic answer.  I’d screwed it up right back at the beginning.

Activate The Phone?  No, actually.

I had used the PwngeTool’s Expert Mode to create the firmware and selected this option:

I had misunderstood that value to mean that it would just register the device on AT&Ts network.   I don’t blame PwngeTool for my mistake (I was in “Expert Mode” and clearly wasn’t an expert!), but I do find that label confusing in light of the comment that tipped me off on the solution:  “If you leave this box checked, your phone won’t get activated on ATT.” Yep, if you check  ”Activate your phone” then your phone will “Not activate”.   Seems backwards to me.

So I started this whole process over from the very beginning (starting at ”The 4.3.3 upgrade” above), but this time used Simple Mode in PwngeTool.  Simple Mode asked me this question:

Well, yes, yes I do.  I believe the answer to this question checks or unchecks the “Activate your phone” option for you.  Yes must equal “unchecked.”  PwngeTool created a new ISFW and then I told iTunes to restore the iPhone using it.

Success!

My phone restarted with iOS 4.3.3, jailbroken and with 4 bars of 3G signal strength on AT&T.  Only 5 hours wasted for a stupid mistake on a project that really wasn’t absolutely necessary.   I did learn a ton about how Cydia and some basics about the system components of iOS.  As a technology guy, I do find a lot of value in understanding systems better.   (But I’d really rather this had just taken the hour I’d planned.)

Since the help on the web for these issues varies far and wide, I thought I’d write up the problems and solutions I’d gone through so others might not feel the same pain.  I can’t claim just altruism though: I also wrote it down so that I didn’t make the same mistake next time!

Alright, now to upgrade my jailbroken iPad…

links for 2011-05-15

  • If you are running into iTunes error 1601 when restoring your iPhone with jailbroken firmware, these instructions are apparently the cure.  

    I ran through them though and it didn't address the problem.  Turns out you just need to plug the iPhone directly into the Mac and not through a USB hub.  I had been plugging it into my Apple Monitor's USB ports.  I moved it to a port on the computer directly and voila!  No more error 1601.