Offline web pages on iPod Touch

One of the things that I really liked about my Palm was using Plucker to view web pages when I’m not connected to the Internet. I’ve found a few apps for the iPod Touch that do this and here are the ones I’ve tried and what I think about them.

I read all of my news using Google Reader and so I wanted an app that would sync with it and keep the articles offline so that I could read them later. I tried Byline and MobileRSS. Both are good RSS readers, however I’ve found that I prefer MobileRSS. The syncing of all messages and ability to scan through all messages easily is great. Also MobileRSS allows one to send web pages to multiple other services, twitter, email, safari, Instapaper, Read It Later, etc. I’m currently using the free version and it works nicely. I’ll probably upgrade to the pro version to get rid of the ads eventually.

For generic web pages I started out using iWebSaver favelet. This favelet takes a given web page and sends it through the iWebSaver favelet site and produces a data page that can be stored on your IOS device. This data page is then opened in Safari when you want to view it. The advantage to this is that you have the whole page as is downloaded onto your device. The problem is that it takes a long time to load and doesn’t remember where you are in the page.

Next I tried Instapaper. This has worked very well for most pages. I’ve been very happy with the scaled down version of web pages. However I found that my Bible study had a problem with rendering. I couldn’t see the days. I’m guessing this is some CSS magic that gets stripped out by Instapaper as extra visuals.

I then gave Read It Later a try. At first I thought that it wasn’t going to help because the stripped down page looked the same as Instapaper and my Bible study still didn’t work. However then I noticed a button at the bottom of the page with a ‘T’ on it. It turns out that this toggles the page from the stripped down text version to the full page. With a little reading through the options I found that if I disable auto picking of the “right” format to download I can have Read It Later always download both the text and full versions of the page. Then when I’m offline I can toggle between the two. This allows me to view most pages in text and then pages like my Bible study as the full page.

Palm Contacts to Google

I have already been using Google to store some of my contacts for syncing using Zindus. So it seemed pretty natural to use Google to store all of my contacts.  Using Google means that my information is available on any platform. Google provides a nice sync interface for the iPod touch that works well in an offline mode, so I was happy with it.

Originally I started writing an application in python to convert my Palm contacts to Google. As I got close to having this done I discovered that the Birthday and Anniversary fields couldn’t get populated via the python API from Google (it may work now, but didn’t work then). So I started looking for other options.

It turns out that Google allows you to export your contacts in a CSV format and can import in that CSV format as well. So I entered a few contacts with all of the fields that I wanted and then did an export to see what I got. The CSV file was pretty standard, but had lots of extra columns. So I tried trimming it down and discovered that I actually need to have most of the columns, even if they’re blank, otherwise Google wouldn’t recognize some of the other non-blank columns. This seems kind of odd, but my guess is that Google is looking for some set of column names to determine if it’s a CSV file from Outlook or one from Google.

So now I needed to get my contacts into the Google CSV format. I started by exporting from jpilot and then trying to reorganize the data. This got old real fast. So I wrote another application in C++ using the pilot link library that would output my CSV files. I’ve put this application up on github so that anyone else can use it as well.

After running this application I had a nice CSV file that I was able to import into Google and all of my contacts were now available to my iTouch. I did end up hacking the IM conversion as I didn’t have many contacts with IM information in my Palm. Otherwise the conversion went pretty well.

Convert Palm Calendar to Google

I chose to use Google for my calendar. I already use Google for some of my mail and I sync contacts with Thunderbird using Zindus. Using Google means that my information is available on any platform. Google provides a nice sync interface for the iPod touch.

One annoying thing about the Google calendar integration with the iPod Touch is the lack of the ability to choose the color of the calendar. You need to choose to sync one calendar, then if the calendar color isn’t what you want, tell google to not sync the calendar, wait 10 minutes, then tell it to sync again. Repeat until you get the color you want.

I started writing a python program to do the calendar conversion as jppy gave me acces to the Palm database and Google has a python version of their API. However I found the python API to be lagging behind the Java API in features supported, such as birthday and anniversary information. So I decided to use Java to interact with Google. In initial testing this worked well, however I needed a way to access my Palm database from Java.

Instead of direct access I choose to write a C++ program that read the Palm database using the pilot link library and then output using Google protocol buffers. This kept me from having to rewrite the code to parse the palm database and give me a format that I could read in most any language. The C++ program is available on github as palm-export. The Java program for importing into Google calendar is also on github as calendar-import.

As of this writing I can import all calendar information except recurrence exceptions. This is when you have a repeating event and have chosen to cancel some of the events in the series. Google supports this concept and I have even gotten it to work for some events. However since I haven’t gotten it to work for all and I can’t tell when it’s not working, I came up with a workaround. Instead of creating the exception I create a new single event for the exception with “EXCEPTION:” prepended to the event name. This way I can recognize when one is canceled and I can just cancel the single event in Google, which works fine.

After the import I found a few of my appointments off by an hour. I suspect some timezones on recurring events didn’t get in correctly, so you’ll want to check appointments that are created with timezones in your Palm.

A couple of things to note. The iTouch doesn’t support all repeat types nor all alarm durations that the Palm does, however Google does. What this means is that these will show up as “Custom” in the iTouch and cannot be entered directly. So when you want to use an alarm or repeat type that the iTouch doesn’t support you’ll need to use the Google web interface to the calendar and then wait for the data to sync, which is pretty fast.

Recently (2/17/2011) I’ve noted that Google sometimes has trouble loading all of my calendars so they will disappear from the iTouch and then come back later. I’m hoping this is just a temporary situation and will be corrected in the future.

Replacing my Palm

I have been using a Palm as my PDA for a number of years. With the decline of the Palm platform I have been looking for a replacement PDA. The smartphones aren’t an answer for me as I really don’t want to pay for a data plan. I was looking at the Archos 43, however I haven’t been able to get my hands on one to see how well it works. In particular if the resistive touchscreen is reasonable. Furthermore Best Buy removed the Archos 43 from their website after listing it for 2 months. So I broke down and bought and iPod Touch.

I run Linux at home, so a major concern is how to sync data. In this post and following posts I will describe the tools that I’ve chosen to use and why; as well as how I imported my old data. Hopefully this will help others that are considering making such a change or looking to convert from one PDA to another or just want to know what tools others are using.

I also wanted to make sure that all of my information is available offline as well like my Palm. So I have mapped each of my Palm apps to the apps on my iTouch and then either web applications or a desktop application to view the data on my Linux computer.

  • Todo: Appigo todo backed in Toodledo to have an online backup. This is also a handy way to edit a bunch of todo items. Note that the free account doesn’t support the hierarchies of the Appigo application, but at least the data is there. To import data here I just manually entered the todo items.
  • Memo: Appigo notebook backed in Toodledo. I tried Evernote, but it was overkill for my needs and I wasn’t able to easily import my information from my Palm. To import data I just copied and pasted from jPilot into Toodledo. 3/20 update: I’ve switched to PlainText for my memos app. It’s really nice because it stores each memo as a text file in Dropbox and then it can be easily edited on my desktop.
  • pFuel: Gas Cubby is a nice application for keeping track of gas mileage and maintenance reminders. It also integrates very well with Appigo’s todo application so that maintenance reminders can be turned into todo items. Importing data here was just a matter of exporting from pFuel through the palm memos application and then massaging the CSV file to match what Gas Cubby wants for their input format.
  • plucker (offline web pages): See this post for details.
  • MyBible: Laridian has made MyBible for the Palm and PocketBible for the iPod Touch (and other IOS devices). I was able to transfer all of my Bibles easily. This worked out very well.
  • Keyring: MyKeePassmore information on this in a future post
  • Titrax: HoursTracker is a nice application for keeping track of time on projects.
  • Dropbox: I didn’t have this on my Palm, but it’s pretty handy for keeping photos as the photo album application won’t let me create albums.
  • Podcasts: Podcaster. I tried iTunes, but you can’t subscribe to a podcast on the device. Podcaster allows me to do this and has a nice refresh feature to grab all of my latest podcasts.
  • Calendar: Google Calendarmore details in a later post
  • Contacts: Google Contactsmore details in a later post