iphone/android sqlite replication service

July 20, 2010

Wow… a long time since my last post! Anyway, I recently released a new service that facilitates the easy synchronisation of sqlite tables from a master data source down to mobile devices.

A simple example probably explains it best – imagine you have an application (whether it be on the iPhone or android) that displays a list of items (eg. a list of Bank ATMs). You would normally store this in an sqlite database and display the list after perform a SELECT statement on the table. The challenge is, though, how do you keep it up-to-date? Re-releasing the application every time a new ATM gets reported is not efficient, but writing your own synchronisation logic is time-consuming and error-prone (especially if you want to make sure that only new and changed records are replicated to the device). This is where the BlackDog Foundry sqlite replication service will help. You can upload the latest copy of the data to the BlackDog server, include a couple of classes in your application that get called periodically, and the BlackDog libraries automatically replicate the data to your device.

Check out our blog for a description of how to use the BlackDog sqlite replication service.


Trap in WSAD j9vm21.dll in debug mode

January 18, 2007

For a long time now, a few of my co-developers have been trying to figure out what caused this trap in WSAD:

Type=GPF vmState=0xffffffff
Target=20030915 (Windows XP 5.1 build 2600 Service Pack 2 x86)
ExceptionCode=0xc0000005 ExceptionAddress=0x1000ac84 ContextFlags=0x0001003f
Handler1=0x111016c0 Handler2=0x10019730
Module=c:\WSAD512\runtimes\base_v51\java\jre\bin\j9vm21.dll
Module_base_address=0x10000000
Offset_in_DLL=0x0000ac84
EDI=0x0011d9c8 ESI=0x008e5e60 EAX=0x74753f3e
EBX=0x0011d9c8 ECX=0x03b5cf14 EDX=0x7463656a
EBP=0x000be300 ESP=0x04381644 EIP=0x1000ac84
Generating crash dump: C:\Documents and Settings\c09974\j9.dmp

I had a quick look a while back, and couldn’t see anything obvious, and my WSAD was working OK, so I didn’t spend too much time on it :-) Anyway, yesterday I found that I was in the same position, and the only thing that had changed on my machine was that I had installed Mercury Interactive QuickTestPro.

Not being able to have my server running in debug model with hot-swap turned on was completely unacceptable, so I spent a bit of time trying to track down what the problem was.
Read the rest of this entry »


Tomcat 5.0 and jmx.jar in Eclipse

January 16, 2007

I used to use the sysdeo Tomcat plugin in Eclipse for my development, but someone suggested that I take a look at the Eclipse Web Tools project, which is an application server feature for Eclipse. It seems like it is the mechanism through which Eclipse is planning to support application servers in the future, so I thought it would be worth a look.

However, once I got it installed, I ran into a problem that is mentioned a few times on various sites on the web, but with few solutions. When I tried to run the application server, I got the following message:

Due to new licensing guidelines mandated by the Apache Software Foundation Board of Directors, a JMX implementation can no longer be distributed with the Apache Tomcat binaries. As a result, you must download a JMX 1.2 implementation (such as the Sun Reference Implementation) and copy the JAR containing the API and implementation of the JMX specification to: ${catalina.home}/bin/jmx.jar

This article describes the workaround that I discovered to make Tomcat 5.0 work correctly inside Eclipse.
Read the rest of this entry »


Tracking spam origination using qmail and vpopmail

January 13, 2007

One of the challenges on the web at the moment is that many sites want you to register a “free” userid just to do the most mundane thing (such as downloading a file, viewing a picture, etc). While I don’t have a problem with that requirement in general, I am often quite sceptical about what they plan to do with my userid.

There is a common technique that many people use where they create a site-specific version of their email address (I believed it is often called “plussed email addressing”). For example, let’s say that my actual address is edwardaux@mydomain.com and I wanted to signup to flickr, I could
create an email address called edwardaux-flickr@mydomain.com and use that (and tell my mail server to forward all email to that address to my real edwardaux@mydomain.com address). The nice thing about this is that if flickr is naughty (not that I am suggesting they are) and sells/gives my email address to spammers, I can immediately determine that by looking at who the email was addressed to.

The problem with this approach is that I have to go into my mail server ahead of time and manually create each site-specific email address. That is a bit of a hassle, and I am sure that I can get away with a simpler approach.
Read the rest of this entry »


Dynamically generating rounded corners in Java

January 7, 2007

I was looking at re-skinning a sporting team website that I had recently created, and really liked the look of the new rounded corners that grace so many websites. There are two main techniques that are used to achieve that look:

  1. Having a number of 1×1 pixel divs that shape the corners
  2. Having some rounded corner images

I don’t really like the first technique because it seems so inefficient (not to mention that it reminds me of the 1×1-pixel fillers of the 90′s), and the second wasn’t able to be used for my purposes because each team on my website can pick their own colour scheme from the full 24-bit RGB colour space (and I didn’t want to have to create 16777216 different corner combinations). So, what to do?
Read the rest of this entry »


Configuring Tomcat5 and Apache2 to run with multiple instances

September 20, 2006

This describes the process for configuring Tomcat 5 on Ubuntu (or Debian) so that you can have multiple instances of Tomcat running. Typically, this would be useful when you have several domains (and/or applications) hosted on the one server and want to keep them running independantly of one another.

The general steps are based loosely on an article in LinuxJournal, however, I have added afew more explanations, corrected a couple of little inaccuracies and added new content to describe the Apache2 mechanism for loading modules and sites.

Read the rest of this entry »


Follow

Get every new post delivered to your Inbox.