About a year ago I had some fun integrating Google Maps into the JAlbum Chameleon skin. Recently a couple of comments had been added to this blog post suggesting some improvements, so I sat down again, tried to remember how this worked and realized a couple of improvements. IMHO this solution could now easily be integrated into the standard JAlbum Chameleon skin.
What's improved?
- For album directories that contain multiple index pages, the Google Map on each index page now shows the images for that index page. Previously only the first index page contained a working Google Map and it included pinpoints for all index pages.
- The old version used an iframe to plug the Google Map into the JAlbum pages. This is no longer necessary because you can now use your Google Maps API key for a complete web domain (no longer bound to a specific directory). This now makes to generate all that is needed from JAlbum itself, no need to use an extra HTML file for the iframe that you had to manually put on your server.
If you'd want to use this Google Maps integration then:
- Get yourself a Google Maps API key. (Just specify the domainname and not the subdirectory where your webalbum is hosted.
- Download the slide.htt and index.htt files and place them in JAlbum/skins/Chameleon directory (make of backup if the originals).
- Specify the following user setting in Settings/Advanced/User Variables:
# The root where the webalbum will be hosted
skin.webroot=/your/webalbum/root# The Google MAP API key that you've have created for your site (see step 1)
googleMapsAPIKey=
- make them work in regular RSS readers like GoogleReader and NetNewsWire, and
- ensure that items in sub folders are included in the main feed
I recently turned on Google Sync for the iPhone to enable wireless syncing of my Google calendar and contacts with my iPhone. A limitation of the current version of Google Sync for the iPhone is that it only supports 5 Calendars. I've got more than 5 Calendars in Google Calendar so that's a problem. Fortunately, many of these Calendars are read only (e.g. public/school holidays, your favorite teams game schedule, etc.) and by combining multiple read-only calendars into 1 read-only calendar it is possible to get them all sync-ed between Google Calendar and you're iPhone.
Of course you can manually download the .ics files of the individual calendars and then import the combined .ics file into Google Calendar, but wouldn't it be nice is this is automated? Do do that I created a shell script that:
- downloads individual calendar .ics files. The URLs of these calendars are stored in a text file.
- kicks of the merge-ics python script to combine the .ics files
In addition I'm hosting that combined .ics file on my webserver, subscribed to it from Google Calendar and scheduled the script to run on a daily basis. So now I'm able to sync these read only calendars to my iPhone without further manual intervention.
Below are the shell script and an example text file contains the calendars to be merged. If you'd want to use it, make sure you update the variables at the beginning of the script and also update the variables in the merge-ics.py Python script. Needless to say that you'll need to download and install that script form the merge-ics site.
# Script takes one argument: filename containing the URLs of the
# Calendar .ics files to be downloaded.
TARGET_ICS_DIR=/var/tmp/merge_ics
TEMP_ICS_FILE=/tmp/temp.ics
MERGE_ICS_SCRIPT=/opt/merge_ics-1.6/merge_ics.py
ICALSFILE=$1
# Get new copies of the ICAL files
for url in `cat ${ICALSFILE}` ; do
# Only successfuly downloaded files are copied to
# ${TARGET_ICS_DIR} to be able to deal with temporarily
# unavailability of a calendar.
rm -f ${TEMP_ICS_FILE}
wget -q -O ${TEMP_ICS_FILE} ${url}
if [ $? -eq 0 ]; then
cp ${TEMP_ICS_FILE} ${TARGET_ICS_DIR}/`basename ${url}`
else
echo "Calendar ${url} could not be retrieved"
fi
done
# Run the merge_ics script
python ${MERGE_ICS_SCRIPT}
Example text file with input:
www.markthisdate.com/calendar/Schoolvakanties_2008_2009_Regio_Midden_Basisonderwijs_Speciaal_onderwijs_2533.ics
www.markthisdate.com/calendar/Vrije_dagen___feestdagen_Nederland_2007___2009_2067.ics
After moving my mail en calendar to the cloud I decided to also to stop hosting my own blog. I've been using Pebble for well over 5 years and have mostly been pretty happy with it. Why?
- Running you own does consume some maintenance time (do upgrades, etc). Especially re-doing the tweaks to templates etc became a hassle.
- I had occasional problems doing posts (typed in a full post, hit the button and ooops... post gone. May well be caused by local set up but even in that case it's even better to move it out).
- It blocked me from doing major OS updates since I wanted to prevent downtime (and I finally want to upgrade my Mac Mini to Leopard).
- It's dependent on the availability of my server and network connection. Both are pretty reliable but still...
- Using Cloud services is this years hype ;-)
Getting a blog setup with Google Blogger is easy, but of course you also want to migrate the old blog posts and not break the links from other sources to you blog. I digged around hoping to find an easy way to migrate the blog posts to Google Blogger and somehow redirects visitors from the old to the new location... no luck. Google Blogger does have an import option, but it only imports it's own exports and the only tool I found migrates from Wordpress to Google Blogger. So I had to scratch my own itch and created a simple command line utility that:
- Reads the original Pebble posts and posts them to Blogger. This includes comments but due to limitations in the Google Blogger API the details of the original poster of the comment had to be included in the comment text and I show up as the poster. (Google does not allow to specify another author as poster of a comment though the API to prevent spam.)
- Validates links in blogs posts and attempts to fix them where possible (for example links between blog posts that would break when moving to new location). If it can't fix a link, it reports this in the log file.
- Generate a redirects file that you can include in your Apache httpd.conf to redirect visitors that access the old location to the new location of a post.
You can find the utility here: Blogger Importer. Feel free to use or extend it. I did the trick for me, but maybe you need some additional features. The current version only works for Pebble but it is set up such that you can easily plug in other sources and migrate these to Blogger.
Another point I have to fix are the Google Maps integrations that I did for showing Skeeler routes. For Pebble I created a 'decorator' plugin that would do some tweaks to the blog post contents which caused it to show the skeeler route on a Google Map. This is now broken and I have to find a solution for that (worst case I'd have to 'hardcode' it into the blog posts themselves, would be nice if it's a more elegant solution though).
As a heads up...
I'm migrating my blog from self-hosted Pebble to Google Blogger. I'll be doing this in the coming days so you may want to update your feed settings:
New blog location: http://blog.vermaas.net
New feed: http://blog.vermaas.net/feeds/posts/default
Since version 8 JAlbum supports RSS feeds for the generated webalbums. Unfortunately, the feeds are not accepted by standard RSS readers like Google Reader and NetNewsWire. Bummer! The problems are caused by:
- the fact that the generated feeds contains relative URLS (and RSS requires absolute URLs)
- the way JAlbum feeds try to include feeds of subfolders. The goal of including the items of subfolders in the parent RSS feed is to make it possible to subscribe to 1 feed and also get items in subolders included (instead of having to subscribe to each subfolder feed separately). JAlbum uses a proprietary JAlbum tag (<jalbum:link..>)to include sub folder RSS feeds and this tag is nog recognized by regular RSS feeds
You can try this out by running the generated feeds through feedvalidator.org. As an example, here's the result of running an original JAlbum generated RSS feed through feedvaidator.org. In addition to the reported erros, the <jalbum:link..> tags are nog recognized by regular RSS readers.
Luckily JAlbum is pretty open and you can easily customized skins and also the template that generates the album.rss feed. The issue with the relative URLs could easily be fixed by adding a user defined variable in JAlbum and some minor adjustments to the album.rss template.
The issue with the inclusion of images from subfolders required a bit more work. It appears that there is no (standard) way to have an RSS feed include another RSS feed. So I changed the albums.rss template such that items of subfolder are also added to the album.rss feed file of the parent folder. No real inclusion and it feels a bit redundant to include items in the RSS feed of the folder itself and in the feeds of all parent folders, but at least the feed is now working in regular RSS readers. Here's an example of a feed.
While implementing the new template file I did run into a few problems that I could not explain, but did find a workaround for. First, it was not possible to use a javax.xml.transform.Transformer, but using org.w3c.dom.ls.LSSerializer it worked fine. Second, some of the standard JAlbum variable sdid not always have the same Java type and sometimes were simply not set when trying to access them from the album.rss tempate. So I had to test for this, try to convert to required type where possible and if all failed, the picture is ignored and not included in the RSS feed. The template now runs successfully on my webalbum picture collection (4500 pictures).
Also want to use this?
- Make a backup of the Jalbum/system/album.rss file. This is the original template file.
- Download the updated album.rss file and copy it to Jalbum/system directory
- Add a user variable 'webroot' to your JAlbum project. Go to Settings/Advanced/User Variables. The value of this variable should be the root of the webalbum on your webserver (for example http://my.domain/webalbum)
- (Optionally) Add a user variable rssItemsNotOlderThanDays to your JAlbum project. If set, then only pictures which is not older than 'rssItemsNotOlderThanDays' days are included in the RSS feed. If not set, all pictures found are included and that may lead to rather big feed files.
- --ADDED--
(Optionally) Add a user variable topAlbumTitle to your JAlbum project. If set, then the value of the variable will be used as the title for the top level directory (if not set, the title of the top level directory is empty).
-- EA ADDED--
Note: I've been using this with JAlbum version 8.1.5. I suspect that it will work with all 8.x versions, but I'm not sure.
Update:
Based on suggestions in the JAlbum forum I made some minor changes to the template:
- JAlbum variable mediarssDate is used a pubDate (instead of picture date, this was already the case in the original template)
- Added copyright notices
- Corrected the way the guid is determined