def main(path1, path2, logfile=None):
    from act_parser import ActParser
    from act_sample_norm import normalize

    print_samples = False
    if logfile:
        log = open(logfile, "w")

        def log_score_enabled(o, s):
            print >> log, o, s

        global log_score
        log_score = log_score_enabled
    else:
        log = sys.stdout
        print_samples = True

    print >> log, "# Reading activity data from %s..." % (path1),
    p1 = ActParser(path1)
    l1 = list(normalize(p1.samples()))
    print >> log, "done, read %d samples" % (len(l1))
    print >> log, "# Reading activity data from %s..." % (path2),
    p2 = ActParser(path2)
    l2 = list(normalize(p2.samples()))
    print >> log, "done, read %d samples" % (len(l2))

    o = int(l1[0].t - l2[0].t)
    print >> log, "# Timestamps are offset by %ds" % (o)
    if abs(o) > min(len(l1), len(l2)):
        print >> log, "# Offset is too big. Assuming clocks out-of-whack..."
        o = 0
    o, score = find_local_max_correlation_offset(l1, l2, o)
    print >> log, "# Minimum score at offset %d is %.2f m" % (o, score)

    if print_samples:
        for s, t in zip_samples_at_offset(l1, l2, o):
            print >> log, "{}\n\t{}\n\t{}".format(geodistance(s, t), s, t)

    return 0
def closer(a, b):
    """Return a score that's higher, the closer a and b are to eachother."""
    return -geodistance(a, b)