Dash Express: Next Generation GPS Navigation
March 28, 2008
If you’re a fan of GPS navigation systems, this is the most compelling reason to upgrade that I’ve yet seen; if you’ve been on the fence about whether to try one on, this just might push you over the edge.
Dash Express is a navigation system with built-in WiFi, better routing capabilities, traffic data, and a boatload of minor feature improvements, combined with an online control panel to expand your reach outside of the car.
The old way to navigate: at home, find the address of where you want to visit, write it down on a sticky pad, and head out to your car. Punch in that address and off you go. If they’re closed, you’re out of luck. Hit a bad patch of traffic, too bad.
Dash Express navigation: hop in your car, search Yahoo! Local for a destination, and get routed. Scan ahead for any traffic backups and reroute as needed. Change your mind as needed. Alert your friends (who are also Dash users) of where you’re heading to, or get updates in your unit of locations sent to you by your friends. Or rewind to the beginning. Find your destination address on your home PC, right-click it in your web browser, then select “Send 2 Car.” When you fire up Dash, the address will be waiting for you.
Dash is to standard GPS navigation systems what Google Maps was to MapQuest. One of things I always thought was “broken” in my nav system is the routing capabilities. To reroute, I’d have to pull up the turn by turn directions, and delete some of the waypoints, hoping I deleted the correct ones to force a reroute. Dash displays multiple routes and lets you choose from them. The UI has some significant improvements as well — at a glance it just looks more organized and intuitive.
Dash isn’t cheap at $399, but it sure is pretty! And maybe you can make up for some of that cost with one of Dash’s built-in features: find the cheapest gas prioces in town, and get routed there. Plus, if it ever gets stolen, you can remotely disable it so the thieves can’t enjoy your new toy.
Making Backup Copies of DVD’s
March 5, 2008
Someone asked me about making DVD backups the other day, so I thought I’d share how to go about this here.
The biggest hurdles to overcome when making backups of commercial DVD’s are the file size when copied, the encryption on the disc, and the legality of doing so.
I’m not going to get into the legal implications of this here, except to say that copying commercial discs is not allowed, and it’s ridiculous that I can’t copy DVD’s I own as backups. For example, if I were the copying sort, making backups of my son’s DVD’s would be a great application of this sort of thing. They could theoretically get all scratched and gummed up because his grubby little two-year old paws would eventually end up all over them. In a situation like that, I’d much rather use a throwaway DVD-R. That could hypothetically save me considerable expense, and after all, I do own these discs (in this purely hypothetical example).
My father-in-law, who is not a U.S. resident, uses Slysoft AnyDVD for his backups. He says that the program is fast, but the backups tend to be of poor quality, presumably because of the file size issue. If I were to compare one of my hypothetical backups with his backups, I bet it would be of much higher quality, because the software that I would choose if I were the backing up sort would handle compression.
So if I were to choose ripping software, I would choose something like the freeware DVD Shrink, current version 3.2.0.15. DVD Shrink is able to remove encryption, and then compress the file to disc so that it can subsequently be burned onto a single DVD-R. It also has pretty good reauthoring features, so I could choose to leave off the foreign language track or bonus features if I were so inclined.
DVD Shrink’s official web site is here, but software can’t be downloaded from it. Rather, there is a forum that links to the various download locations. If I were to download DVD Shrink, I would make sure that I downloaded it from one of the locations referenced in that forum, and nowhere else. If I were to do it, of course.
A good quick start tutorial can be found, and more in-depth task-based tutorials are available.
Once this hypothetical file were on my PC, I would then go about burning it to a DVD. A very capable program that could be used to burn these types of files is the free ImgBurn software, luckily available fro download directly from their site. The current version is 2.4.0.
If I were to go about making backup copies, these are the programs I would use. They are very capable and make high-quality backups. But due to the decryption, compression, and drive speeds, they would take some time to copy a full DVD, perhaps along the lines of 30 minutes to rip and 30 minutes to burn and verify. Or so I would reasonably expect.
In all seriousness, while I do think it’s ridiculous that I can’t backup movies I own for my own personal use, I am strongly opposed to intellectual property theft of any kind. I would never consider it, and I discourage everyone I know from doing it. Fair use on the other hand is. . .well, fair.
Free Geocoders / Geocoding Posts
December 28, 2007
Several weeks ago I was making changes to an as-yet-unreleased wiki, and to protect it from prying eyes I locked it up from all IP addresses except my own. My IP address was just updated, and looky looky, I can no longer access the wiki, which brought that permission change to the forefront.
Problem is, I posted several articles on some free geocoders I wrote. Just simple tools that you can use to geocode addresses via Google’s Map API or the Geocoder.us service. Those tools are only available on the wiki, so I’m afraid that everyone was met with a ‘403 access denied’ error when attempting to access them.
Everything is open again; please accept my sincerest apologies. There’s nothing I hate more than wasting my time, so I hope I didn’t waste too much of yours.
All I Want for Christmas: BUG, from Bug Labs
December 20, 2007
This is one of the more interesting products I’ve seen in a while, and although it doesn’t look
like it’s going to be shipping in 2007, this is high on my wish list for 2008.
Bug Labs has created open source hardware modules that can be snapped together like Legos to create a mobile device. You start out with the well-equipped BUGbase, with built-in Wifi, USB, and ethernet. BUGbase has four connectors used for snapping on the open source hardware modules. Each module or combination of modules you snap on enables additional device capabilities. Current and upcoming modules include:
- Camera / videocamera
- GPS
- touch screen
- motion sensor / accelerometer
- qwerty keyboard
- speaker and jacks
Then comes the software, also open source and community-developed with Bug’s own SDK. It looks like there are a handful of applications out there currently, with most being of the test variety, but it doesn’t take long for these kinds of plug-ins to gather momentum.
Sure, these things look like bricks, but you can’t beat the gadget appeal.
Check them out at http://www.buglabs.net/.
Geocoding based on an IP Address
November 13, 2007
Okay, so I’m on a bit of a geocoding kick here. Previous posts have discussed geocoding when you have a physical street address. But obtaining an address can be obtrusive, and the dataset used is North America-centric. This post focuses on very quickly geocoding a user’s location based on their originating IP address with MaxMind’s GeoLite City database and Java API.
There are a number of reasons why you might want to determine a user’s location based on their IP address:
- Center a map mashup on the user’s location
- Serve localized content, e.g. language, currency, time
- Reduce credit card fraud (this seems to be the most commercial use at present)
- Target marketing and ads
The biggest problem with geocoding by IP address is that it can be inaccurate for many IP addresses. This is because the coordinates for a given IP address are for the organization that owns the IP address block, and not necessarily the location of the end user of that IP address. Complicating this further are those users who connect via a proxy — e.g. AOL users. So private IP’s, VPN’s, proxied browsers, internal network blocks, and so on are difficult to geocode.
Using the GeoLite City Database on Your Server
You have two download options: CSV and binary. If your project requires that you import data into MySQL, you can use the CSV option, but it is much slower and requires more effort to setup. Binary is your best bet, and is what I used.
I installed the GeoLite City binary on both a Windows development PC and a Linux server. On Windows, download to your PC, and extract using WinZip or similar tool. On Linux:
$ wget http://www.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
$ gunzip GeoLiteCity.dat.gz
$ mv GeoLiteCity.dat /path/to/database/location/GeoLiteCity.dat
Import the Java API into your current project in your IDE of choice. I’m using JBuilder (boo, hiss). There are also API’s for C, Perl, PHP, C#, Ruby, Python, VB.NET, Pascal, and JavaScript.
Using the Database (IP Address to Latitude and Longitude)
1) In your class file, create a LookupService object, specifying the location of the database you extracted. Then create a Location object for the IP address you want to geocode:
LookupService lookup = null;
try {
lookup = new LookupService(PATH_TO_DATA, LookupService.GEOIP_MEMORY_CACHE);
} catch (IOException e) {
System.out.println(ex.getMessage());
ex.printStackTrace(System.err);
}
Location location = lookup.getLocation(”62.75.185.174″);
2) Then you can extract location information from the Location object, including country, region, city, postal code, latitude, longitude, area code, and timezone.
String city = location.city;
float latitude = location.latitude;
float longitude = location.longitude;
If you create two Location objects from LookupService, you can calculate distance between them with:
double distance = location1.distance(location2);
3) Remember to close the database connection. Data access is thread safe, by the way.
lookup.close();
Note that to use GeoLite City on a public web site, you must include the line “This product includes GeoLite data created by MaxMind, available from http://www.maxmind.com/” in any documentation or promotional materials.
Apache and Tomcat via Cpanel - Servlet Display Problems
November 7, 2007
Problem
Apache Web Server was not passing servlet requests to Apache Tomcat. Instead it served 404 errors, even though the Apache Tomcat Connector (JK 1.2, mod_jk) was auto-configured by the WHM / Cpanel installation.
Other Possible Descriptions of the Problem
- Jsp’s work in Tomcat, but servlets do not
- Apache Http Server won’t pass servlet requests to Tomcat
- Tomcat problems using the Cpanel plugin
- Virtual host configuration problem with Cpanel Tomcat
- Apache not recognizing servlets
- Servlets can’t be accessed through Apache
In the latest Cpanel Release (11.15.0-RELEASE 17853), Tomcat support has been integrated. Prior to this (I’m not sure for how long), Tomcat was available via a beta plug-in. I experienced this problem with both the beta plug-in and the integrated support.
What’s Happening
Apache Http Server accepts all web requests and determines which are requests for static content, and which requests should be forwarded to Tomcat.
Apache correctly serves static content, and correctly passes all requests for .jsp pages to Tomcat. But when a servlet is requested, e.g. www.myserver.com/myapp/myservlet, Apache looks for the “/myapp/myservlet” directory, and finding none, spits out a 404 error.
How to Resolve the Problem
I tried several things that I thought should work but did not, though I don’t know if it was due to my specific configuration or because they were just the wrong things to do. What finally solved the problem was just adding an .htaccess file to the root of the web application with the following lines:
SetHandler jakarta-servlet
SetEnv JK_WORKER_NAME ajp13
This forces Apache to forward all requests to resources within this context to Tomcat for processing, specifically to worker ajp13. Ajp13 is one of the default workers set up, and is defined (on my system) in /usr/local/jakarta/tomcat/conf/workers.properties.
Other things that I thought should work but didn’t (your mileage may vary):
1) In /etc/httpd/conf/jk.conf (if your httpd.conf file includes jk.conf),
add/edit the switch “+ForwardDirectories.” Normally, if Apache runs
across a directory it doesn’t recognize, it will spit out a 404. This
switch says to forward those requests to Tomcat, and let Tomcat spit
out a 404 if it can’t fulfill the request.
2) In /etc/httpd/conf/jk.conf (if your httpd.conf file includes jk.conf), specifically mount each context, and unmount static content. Mounting tells Apache to pass requests to Tomcat, and unmounting tells Apache to serve the content itself. Newer versions of Tomcat are faster than Apache at serving static content, but apparently, using Apache to serve static content is safer from a security perspective.
JkMount /mywebapp/* ajp13
JkUnMount /*.gif ajp13
JkUnMount /*.jpg ajp13
A separate issue that is outside the scope of this post is whether you should use Apache Web Server to front Tomcat requests, or whether you should just have Tomcat accept requests over port 80. If you’re using a recent Tomcat version (5.5+), Tomcat can serve both static and dynamic content faster than Apache.
Use Tomcat if: 1) you’re only dealing with a single server; 2) and you’re not using any other software that requires Apache (e.g. forums or wikis written in PHP).
Use Apache to front Tomcat requests if: 1) you want to load balance across multiple servers; 2) or you want different web applications or virtual hosts to be served by different processes.
Disclaimer
I know embarrassingly little about hardware, networking, or server setup. This solution might be a hack or it might be obvious to some more familiar with the components mentioned, but it couldn’t be resolved through a dedicated server help desk or through the Cpanel help desk, so I assume there are others out there that this could help. Everything in this post is based on my limited experience with the aforementioned software and my own research. If you know of a better, cleaner way to do this, or if you know how better to describe this problem or solution, please forward to me and I’ll amend this post.
Rationale Behind this Post
I recently (as in yesterday) resolved a difficult to diagnose problem involving Cpanel, Apache Web Server, Apache Tomcat, and the Apache Tomcat Connector (JK 1.2, mod_jk2). My googling skills tend to be above average, but I could find no reference to this specific problem anywhere, and the sole purpose of this post is to hopefully save someone else the aggravation. So please disregard the keyword-heavy text — it’s altruistic in nature, I assure you.
Geocoding with the Google Geocoder
November 5, 2007
Before using the Google Geocoder, you must have a Google Maps API key. It will not work without one. If you don’t yet have one, get yours via the Google Maps API page. Also, to get this out of the way, Google has provided a fantastic service free of charge for non-commercial purposes. Please respect their terms of service.
Download the free Google Geocoder
The Google Geocoder is very similar to the Quick ‘n Dirty Geocoder. It is free software, and can be used and distributed however you like. It installs in a servlet container, and accesses the Google Maps web service to translate the names and addresses you supply (in a text file) into geographic coordinates, which it then writes back to your PC and/or a database.
For details on how to install and use this software, frequently asked questions, configuration, etc., refer to the wiki article. The short version is just drop goog.war into Tomcat’s webapps directory, start it, then follow the instructions at http://localhost:8080/goog/code. This post describes some of the Java code used to implement the communication between the Google geocoder and the Google Maps web service.
Geocoding with the Quick ‘n Dirty Geocoder
November 1, 2007
The geocoder described in this post is free software, and can be used and distributed however you like.
It installs in a servlet container like Tomcat, and accesses the geocoder.us web service to translate the names and addresses you supply (in a text file) into geographic coordinates, which it then writes back to your PC and/or a database.
For details on how to install and use this software, frequently asked questions, configuration, etc., refer to the wiki article. The short version is just drop geo.war into Tomcat’s webapps directory, start it, then follow the instructions at http://localhost:8080/geo/code. This post describes some of the Java code used to implement the communication between the Q&D geocoder and the geocoder.us web service.
Most lines of code in this application are used in IO on your own PC, rather than the web service. The GeoServlet receives requests, and uses the GeoImporter to read in and parse files from the text file on your PC. It then uses the GeoTransport class to communicate with the geocoder.us service, and finally writes the results back to a file and/or database with the GeoExporter class.
Geocoding with Geocoder.us and Google Maps
October 30, 2007
Geocoding is the process of assigning geographic identifiers to map features — a specific example is assigning a latitude and longitude to a given street address. A common technique uses address interpolation. Using this method, if we know a street address and the endpoints of that street, we can interpolate the approximate location of the specific address.
The address information comes from the TIGER/Line files, which are extracts of selected geographic and cartographic information from the US Census Bureau’s TIGER (Topologically Integrated Geographic Encoding and Referencing) database.
So the task of a geocoder is to parse an address for street numbers, names, cities, states, and zip codes, and then interpolate the coordinates of that address by finding its endpoints in the dataset. I recently used two geocoders, Google Maps and Geocoder.us, and thought I’d share the results of my work along with free software that you can use to geocode your own addresses.
15,000 Downloads for Amazon-OnTheGo
October 4, 2007
We’re just wrapping up device support and SEO on our new mobile / web application (if all goes well, we’ll deploy in a week or two). Great stuff: mobile messaging, a maps mashup, location-based alerts, friend finder, and a place finder all wrapped up in one package called Swirl Connect.
In working on the SEO, I looked at Amazon-OnTheGo’s traffic stats, because it’s received a fair amount of traffic with very little effort on my part. It was always supposed to be a quick and dirty little project, but it’s attracted just over 15,000 downloads to date, and has received some good feedback along the way. Feedback I’m sorry to say I’m just getting around to seeing. Here are a few mentions:
- SarahInTampa.com: Amazon To Go Good luck with your move to WordPress!
- Amazon-OnTheGo on java.com
- 10 of 10 rating on GetJar
- Short mentions in SearchEngineWatch, Wendong’s Smart Phone Blog, ResourceShelf, and The Cell Freak.
Thanks for the feedback!



Recent Comments