Monday, January 18, 2010

Diagnosing Poor iPhone Battery Life

My iphone's battery life plummeted last week, from a half day to just a few hours. Naturally my warranty had just expired, and I feared that I'd have to buy a new phone, pay an exorbitant battery replacement fee, or spend time learning how to replace the battery myself.

Ultimately, I found the cause -- a botched migration from one Exchange server to another -- and I was able to restore battery life to normal. Here's how I diagnosed the problem:

1. Search Google. This wasn't very fruitful. Most of the advice I found to increase battery life was tantamount to "Don't use your phone the way you want to."

2. Ask on Twitter and Facebook. Lots of friends came to the rescue. One friend had had success using a "full restore". Another had tried two full restores unsuccessfully, and eventually exchanged his phone for another at an Apple Store. Thankfully I didn't have to go to those extremes. The most helpful response was the question "Is your phone warm when it's not charging and you're not using it?" Answer: yes.

3. Delete applications you don't use. I had accumulated quite a few applications that I never use. Deleting all of them was a painless test to see if one was burning up the battery. No luck in my case.

4. Disable push notifications. I like push notifications, so this wouldn't be an acceptable solution, but it's a good test. I disabled global push notifications and each application's sounds, alerts, and badges. Still no luck in my case.

5. Delete email accounts. I remembered that my company's IT group had recently changed the address of our Exchange server. To get my email after the switch, I had changed the hostname on my phone. I suspect my phone retained the old hostname somewhere and periodically tried to connect to it.

After deleting my Exchange account, my battery life improved again. I recreated the Exchange account, and my phone continues to behave normally.

Tuesday, January 12, 2010

Using Twitter as my RSS/Atom Feed Reader

Update 2010/01/18 3 PM: After several attempts, I'm giving up on making this work via FriendFeed. There have been several prolonged periods (tens of hours) during which FriendFeed posts no items from my Google Reader feed.

Update 2010/01/16 1 PM: FriendFeed didn't post automatically from the original Google Reader feed I created. At Chris Myles's suggestion, I created a new label "FeedToTwitter" in Google Reader that does not contain any spaces. Posts are now flowing from 115 different RSS and Atom feeds, through Google Reader, through FriendFeed, to Twitter, where I can read them from any Twitter app.

Update 2010/01/13 7 PM: I'm using FriendFeed instead of Twitterfeed.  FriendFeed consumes my Google Reader feed and posts to Twitter in real time.  I created a new FriendFeed account and configured it to post to Twitter from the FriendFeed Tools page.

Update 2010/01/13 10 AM: I'm disappointed to discover that this idea doesn't work in practice.  Only a small percentage of the items shared via my Google Reader reach the Twitter account I created.

I realized recently that I'm getting most of my news from Twitter, and I had stopped reading the feeds I had subscribed to in Google Reader.  It's not that those feeds don't have interesting content.  But reading them isn't convenient, and the Google Reader user interface makes me feel that I should try to read everything, an impossible task.

Instead, I'm using Google Reader and Twitterfeed to feed all of that content to Twitter.  Here's how:

  1. I share an aggregated feed from Google Reader.  From Manage Subscriptions, I add all of my subscribed feeds to a new folder "Feed to Twitter". On the Folders and Tags view, I share the new folder. Google Reader creates a public page and a public feed for the shared folder.
  2. Twitterfeed automatically tweets each of the items in the shared feed. I use Twitterfeed to subscribe to the shared feed and tweet each item using a new Twitter account that I created.
  3. I follow the Twitter account that tweets feed items. I follow the new Twitter account from my main Twitter account, and I see feed items interspersed with Tweets in my timeline.

This method has some shortcomings:

  1. I'm accepting a lack of privacy. All the feeds I follow in Google Reader are visible to everyone.  That doesn't bother me.
  2. Twitterfeed delays posting feed items. Google Reader publishes my shared items in real time using PubSubHubbub, but Twitterfeed doesn't support real time subscriptions yet.
On balance, it's a big win for me:
  1. I don't feel compelled to read every item. The stream passes by. When I want to read, I read. When I want to stop reading, I stop.
  2. I have more choice of readers. I can use any of the growing number of Twitter apps to read my feeds, whereas RSS reader development has stagnated.

Saturday, September 5, 2009

Publishing a Lifestream with Google Reader, Tumblr, and Disqus

The recent birth of my daughter Reese has inspired me to keep a better record of my thoughts and feelings.  My original motivation, to capture for posterity the tweets I had written during labor and delivery, soon evolved into a more significant effort to establish a comprehensive lifestream of the content I produce and reference in public on the Internet.  My search for existing solutions left me disappointed, and I set out to patch together a solution of my own from a variety of free services, each of which provides a piece of the whole puzzle.  Thanks to RSS and the following services, it's all possible without writing a line of code. (Okay, I had to copy/paste a little code, but the services generated it all for me.)

Google Reader

First, I subscribed in Google Reader to the RSS feeds of each of the services I use to publish or reference content.  In my case, this includes:
Blog hosting
Open source code hosting and collaboration
Book reviews
Fitness logging
Neighbors for Neighbors Dorchester
Neighborhood community
Real-time short messaging
I added each of these services to a folder, and used Google Reader's Settings to share the folder.  The feed for the shared folder is a reverse chronological list of posts from each of the constituent feeds.  Google Reader produces an attractive web page associated with the shared folder.  However, Google Search does not index the page, nor does the page provide a commenting feature.

I realized that if I could cajole a blog hosting service into reposting each of the posts in my Google Reader feed, I'd get the search and commenting functionality I wanted.  I was surprised at the difficulty I had finding such a service, given that "publish from RSS" seems like such a simple feature to implement.  Indeed, if you host your own blog software, there are a variety of plugins at your disposal.  Nevertheless, it seems that most blog hosting services feel the user base for such a feature is dominated by sploggers.  Lack of clearly distinguished terminology compounded my difficulty identifying a service that fulfills my requirements.  For example, search results commonly equate "autoblogging" with republishing content as spam, whereas services accept "reblogging" as the social practice of sharing content from upstream publishers.  The subtle distinction hinges on intent. 


Once I was able to wipe "autoblog" from my mind and try searching for "reblog", I discovered Tumblr.  Tumblr addresses the spam concern by banning the practice in their content policy, and provides both manual and automatic reblogging features.

I created a Tumblr blog and configured it to automatically import my lifestream folder's feed produced by Google Reader.

To provide a little more transparency regarding the sources of the content on my Tumblr blog, I added a clip of posts and a blogroll.  Tumblr's polling of my feed introduces some delay in the publishing process; the clip mitigates this problem by displaying links to the latest posts as soon as my lifestream folder feed includes them.  The blogroll links to each of the constituent feeds that compose my lifestream.  To add the clip and blogroll, I copied the relevant code from Google Reader's Settings and pasted it into my Tumblr template.


Unlike other blog hosting services, Tumblr does not provide a commenting feature.  Fortunately, Disqus's sophisticated commenting service integrates with Tumblr, with the added bonus that Disqus indexes the social web, finds reactions to your posts that are published elsewhere, and displays them alongside comments.

I created a Disqus account, copied the appropriate integration code, and pasted it into my Tumblr template.

Content Requiring More Effort to Republish

Extracting and republishing my content from the following services required a bit more effort.
Email list archival and search
Google Groups
Usenet and web forum hosting, archival, and search
iPhone app personal trainer


I'm an occasional contributor to various email lists.  Some of these lists have archives that can be read via RSS, but I want to include only my posts in my lifestream.  Doing so involves combining Gmane Search with Dapper site scraping.

Gmane provides search by author, so it's easy to locate my posts.  However, the search results are not accessible by RSS.  Enter Dapper.


Dapper is a data mapping service.  It extracts content from any web page and publishes it in any of a variety of formats, including RSS.  I used the Dapper wizard to search Gmane and produce an RSS feed of my email list posts.  I subscribed to the resulting RSS feed in Google Reader and added it to my lifestream folder.

Google Groups

Google Groups archives Usenet posts and hosts non-Usenet forums presented with the same user interface.  Google Groups does not provide RSS feeds of search results directly.  Fortunately, Google Alerts can do so.  I created a Google Alert, delivered to a feed, comprising the results of a search for my email address.  I subscribed to the resulting feed in Google Reader and added it to my lifestream folder.


FitnessBuilder is an iPhone app from PumpOne.  Several of PumpOne's iPhone apps integrate with MapMyFitness.  Using those apps, I previously would sync my workouts to MapMyFitness, which would include them in its feed of my activity.  FitnessBuilder does not provide the same syncing feature.  Fortunately, it can email workout logs, and Blogger accepts posts by email.  I set up a Blogger blog for my FitnessBuilder workouts, and I post to it by emailing my workouts from the FitnessBuilder app.  I subscribed to the blog's feed in Google Reader and added it to my lifestream folder.