Beeminder Forum

Restarting Odometer to non-zero value


#1

Hi,

I’m beeminding my book reading using an odometer goal. I just finished a book and picked up another one with a huge preface that I am going to skip. This means I will start at page 40. I submitted a data point of “0” to reset the odometer, and another of “40” to start. The problem is beeminder thinks I have read 40 pages.

Any way I can deal with this?

Thanks!


#2

Eep, this may be a bug. Does it work if you make the zero datapoint and the 40 be on different days?


#3

Thanks for the reply Daniel.
I tried putting the datapoints on different days, but it still doesn’t behave as expected.


#4

I think beeminder is working as expected, @samern wants a way to skip 40 pages of his book without getting the credit for having read them. To do an odometer reset to 40 rather than a reset to 0.

Does it work if you delete the zero datapoint and then reset it by entering 40? (Without the zero first)


#5

Ah, sorry, that makes sense now. So, yeah, there may not be a good solution here, other than to subtract 40 from all the numbers you report for that book.


#6

Is it possible to do a 40 page retroratchet?
(Or just be happy for the 40 free pages of extra buffer!)


#7

But whatever the yellow brick road does, you don’t want the total number of pages read to be wrong. That’s the part I’m not seeing a way to fix, other than to subtract 40 from all the datapoints for that book. (Or subtract 40 from the final datapoint and then the data is only temporarily wrong but ends up right again.)


#8

Sadly, no, I get a sharp decline on my graph.


#9

Ah, too bad. I was hoping there would be a way to reset to a non-zero value. Oh well :smile:


#10

Make a feature request post for it.
It should be fairly easy to treat an odometer value < max to be a reset to that number.


#11

We actually originally implemented it that way (this was over 3 years ago, when we were still in beta) where any odometer decrease would be treated as an odometer reset, but then someone – I think it was @mel’s husband, Cam – had some legit reason for their odometer reading to go down and it seemed like everything was horribly broken (even to us who implemented it that way) or at best was just horribly confusing. So we compromised with only explicit zeros counting as odometer resets, which I still think is a decent tradeoff. (If anything we should’ve nixed the whole odometer reset feature by the anti-magic principle but it really is super handy for book-reading goals or bike odometers!)

One more workaround idea: Find some short stories or something to read that fill in that 40 page gap. (:


#12

Reset responsive to something like explicit zeros or “ODOMRESET” somewhere in the datapoint’s comment, maybe?

E.g. of datapoints and the way they affect the totals:

16 230 “Last pages of book”
{Total pages read: 230}

17 40 “New Book Title. Starting part of the way through. ODOMRESET”
{Total pages read: 230}

18 50
{Total pages read: 240}

(New users unlikely to need to know it, so it being a little specific is probably not a big problem. I can think of non-book uses of this, but It’s probably not relevant here.)


#13

@chipmanaged, this is smart, though it’s totally in the category of features you’ve been imploring us to resist. (:

I’ve been tempted to do this though, parsing various hashtags in the comments, like for this milestone/goldstar suggestion.


#14

Agreed. It wasn’t that I thought it was a feature that you ought to add; it was just an idea in case you were going to do something (or for later on).


#15

Hashtag parsing would be awesome, and would open up the field to a bunch of new/interesting use cases.


#16

(The reply form suggests me to consider really good if I want to revive this topic - and I think I want because I have just today thought of a totally working and QS-friendly way to reset the odometer to a non-zero value. So, just for posterity, if anyone comes searching.)

For example, after having finished a book (say on page 200), I want to start another one, where the real text I beemind reading starts only on page 15.
My data points, consecutively, will be:
200
0
-14
0
14
And here I am, with a goal ready to receive any further progress, without any not-earned buffer.
Unlike retroratcheting suggested above, this keeps the total number of pages read QS-true.


Feature request: ability to enter negative values on iOS
#17

That is ingenious; thanks so much for that solution!

How to make that work for normal humans is the next question. I mean, it’s totally reasonable once you understand the algorithm we’re using, but… :slight_smile: In the meantime, here are some…

Tricks for odometer goals

The odometer reset feature is surprisingly versatile. The basic usage works as follows. Note the y-values (what’s plotted on the y-axis) shown on the right.

Starting a new book but keeping the odometer running

^ 20 "first 20 pages of my first book!"  # y=20
^ 50 "that's it for book 1"              # y=50
^  0 "odometer reset -----------------"  # y=50
^ 10 "first 10 pages of my second book"  # y=10+50=60
^ 15 "a little further in book 2"        # y=15+50=65

Technically what happens is it finds a zero datapoint and adds the y-value at that point to every future datapoint. So above, since the odometer reading was 50 when it got reset, every future value has 50 added to it. So Beeminder keeps tracking the cumulative total (just like with auto-summing Do More goals) despite the odometer reset.

That was the intended usage but you can actually do arbitrary adjustments by entering a number sandwiched between two zero datapoints to reset and adjust the odometer by that number. Ie, reset, adjust, reset again. Examples:

Skipping the 14-page preface of a book:

^ -14 "i'm starting reading this book on page 15"            # y=-14 
^   0 "reset the odometer -------------------------------"   # y=-14
^  15 "starting reading on page 15"                          # y=15-14=1
^  16 "i made it to page 16 which is like page 2 for me"     # y=16-14=2

Skipping 50 pages (from page 100 to 150) of War And Peace:

^    3 "i read the first 3 pages of War&Peace. go me!"                 # y=3
^  100 "omg War&Peace has put me to sleep by page 100"                 # y=100
^    0 "reset the odometer ------------------------------------------" # y=100
^ -150 "don't count 150 pages: 100 already counted & skipping next 50" # y=-150+100=-50
^    0 "reset the odometer again ------------------------------------" # y=-50
^  150 "ok, tolstoy, let's try this again"                             # y=150-50=100
^  151 "made it to page 151 so 101 pages read so far (skipped 50pp)"   # y=151-50=101

Bookmark page 5, read pages 8-10, then continue from bookmark, ie, return for pp. 6-7:

^  1 "I made it thru page 1 of this paper"                              # y=1
^  5 "here I am at page 5, halfway thru, about to jump to page 8"       # y=5
^  0 "reset the odometer ---------------------------------------------" # y=5
^ -7 "skipping to page 8 (so pages 1-7 are already counted or skipped)" # y=-7+5=-2
^  0 "reset the odometer ---------------------------------------------" # y=-2
^  8 "I've now read page 8 (6 total pages read now)"                    # y=8-2=6
^ 10 "last page of the paper! (have read 1-5 & 8-10)"                   # y=10-2=8
^  0 "reset the odometer ---------------------------------------------" # y=8
^ -5 "skipping the first 5 pages before starting at 6"                  # y=-5+8=3
^  0 "reset the odometer ---------------------------------------------" # y=3
^  6 "back where I left off"                                            # y=6+3=9
^  7 "I've now read the whole paper!"                                   # y=7+3=10

Add a one-time +1 to an odometer goal

^  10 "first 10 pages of this book"                                      # y=10
^   0 "reset the odometer ---------------------------------------------" # y=10
^   1 "I read one extra page from some other place. +1!"                 # y=1+10=11
^   0 "reset the odometer ---------------------------------------------" # y=11
^ -10 "skipping to page 11 (pages 1-10 are already counted)"             # y=-10+11=1
^   0 "reset the odometer ---------------------------------------------" # y=1
^  20 "continue reading, now up to page 20"                              # y=20+1=21

[tagging this #blogideas]


Following the spirit of the commitment with odometer goal for books
Following the spirit of the commitment with odometer goal for books
Small bugs in time-based values
#18

This also generalizes to reading multiple books simultaneously!

^   75 "75 pages of my first book"
^    0 "reset the odometer to switch"
^   18 "18 pages of book 2" 
^    0 "reset again when switching"
^  -75 "already read 75 pages in book 1, don't count those"
^   86 "11 pages of book 1!"
^    0 "switching books again"
^  -18 "back to book 2, don't count what I've already read!"
^   48 "30 more pages of book 2!"

With a little cleverness you can track arbitrarily many books at once on the same odometer goal and all it requires is that you look at your datapoints or remember where you started reading in order to keep your total accurate!

ps I don’t think there are any off-by-one errors here but this is admittedly tricky, when considering the use cases of switching books vs starting after 15 pages of front matter or jumping around. Please feel free to correct me!