WatchUSeek Watch Forums banner

Open source timing software.

279176 Views 604 Replies 139 Participants Last post by  tpiepho

Hi guys,

I have a more or less usable version of my timing program that is ready
for initial testing, if anyone is interested.

First the goodies. Here are Windows binaries
http://ciovil.li/tg.zip
and here is the full source code
https://github.com/vacaboja/tg

Now some info on the program. This program is released under the GNU GPL
license, version 2 -- basically you can do what you want with it, free of
charge, no warranty, if you redistribute a (modified) version, you must
distribute also the source code. If you want to build from source, you
need gtk+ (I'm using v. 2.24), portaudio2, and fftw3, plus a C99 compiler
clearly. If you want to run the Windows version, just download the zip
archive, unzip, double click.

This program tries to pick up audio from the default audio input of your
computer, which should be the same that Audacity defaults to, so you can
test the audio setup with Audacity. It does not fiddle with the volume:
just check that it is set to a reasonable level. Of course the rate that
you get from this program, for any watch, is affected by the rate of the
clock of your sound card: the same holds for all timing programs and there
is no escape (except calibrating the card against a reliable time source).

The algorithm I decided to use is quite hungry of computing power, so I
made two versions: "tg" is the full version, "tg-lt" is a lighter version.
The light version sacrifices some accuracy and noise resilience for speed.

My intended audience is amateurs and tinkerers. This program has not been
written for professionals, neither do I want to compete with
professionally built hardware or software, nor with those that can write
better software on their own. In particular I have set to myself the
following three goals.

One. Try a less conventional algorithm to deal with bad audio, at the
expense of lots of number crunching (all other programs for which I did
find information online use possibly some band pass filter and a threshold
trigger, we do it differently). I can currently obtain satisfactory
results from the internal mic of my ThinkPad and a few other lower quality
mics. I don't know how it will perform with a good piezo, but I am
interested (probably, for clean audio, mine is not the best approach).
Your mileage may vary.

Two. To avoid complaints like this one
Review: TickoPrint Android App | Watch Guy
the entire operation of the algorithm is designed to be double-checkable.
In particular, the waveforms that the program associates to the tics and
tocs of the watch are shown in real time, so one can check that they are
properly recognized and properly aligned. The slope representing the
currently detected instantaneous rate is drawn (the blue lines) on the
timing-machine-like graph, etc. See also the discussion here for some
example of such double checking
https://www.watchuseek.com/f6/definition-beat-error-2394130.html

Three. Make it open source, so other people can tinker with the source
code (well, this one was the easy part).

Usage should be quite intuitive for those that know how an escapement
works. See also the thread referenced above for more info.

That's all for now. Any feedback is appreciated.
See less See more
  • Like
Reactions: 5
141 - 160 of 605 Posts
Hi, I answered to your ticket on GitHub some time ago. Did you test the fix?
Many apologies. I receive a lot of GitHub notifications from work so must have missed it. I'll test this evening and let you know.

Sent from my iPhone using Tapatalk
Ace No. 1000 Timegrapher comparison

It's a busy day at church this Good Friday, but the Ace Timegrapher (1000) just arrived from UPS and I couldn't resist a quick look. Here is a photo of the same watch measured on both platforms simultaneously. Really I should do a video, but I will just share this one photo and promise to follow up with more details later. The biggest "detail" to note is that getting the microphone/preamplifier working well was critical to "tg" performing properly. Specifically, until I resolved the 60Hz hum, "tg" would draw a porpoised line, with timings ranging from -300s/day to +300s/day, oscillating back and forth over the space of a minute. But I could go on and on. Here's the pic. I'll post more when I get some time, hopefully this weekend...

Electronic device Technology Screen Oscilloscope Electronics
See less See more
  • Like
Reactions: 3
3
Ace Timer No. 1000 Timegrapher comparison #2

Here are more details of a side-by-side comparison between my brand new "Ace Timer No. 1000 Timegrapher" and the open-source "tg" timegrapher software by Marcello Mamino, aka "vacaboja" aka "contrate_wheel". Source code here.

Overview

  1. tg consistently reports +3 to +5 seconds/day higher than the Ace Timer. It agrees within 0.1ms on the beat, and about 5° on amplitude.
  2. On two watches tested overnight the Ace Timer was more accurate for seconds/day. I cannot independently confirm beat or amplitude.
  3. The microphone matters a lot. I ended up using a modified Logitech USB microphone.
  4. I compiled and ran tg as a native binary on my HP Envy laptop running Linux Mint 1.71. Windows binaries are supplied by the author. It has been reported to run on OS/X, too.

Setup

The Microphone

The sound source makes a big difference. In all honesty one of the best things about the Ace Timer is it includes an optimized microphone on a convenient rotating stand with built-in watch clamp. The biggest challenge I had with tg was getting suitable audio input. Here's what I tried...

  1. Total failure. I tried to find the microphone on my laptop for laying the watch atop it, as others have demonstrated on this thread. No luck, after trying for a long time. If anyone knows where the mic is on an HP Envy 15-k016nr please let me know, heh.
  2. Total failure. I tried to use the microphone built-in to my Sennheiser Momentum headphone cable. Again, no luck.
  3. Partial success. I took a piezo mic for an acoustic guitar ($5 on ebay) and with the help of various adapters/cables connected it to the phonograph input of an old 5W amplifier. With more cables I routed the amp's output to the microphone input on my laptop. This worked very poorly until I resolved the 60Hz hum by connecting both the amplifier and the watch to the grounding plug on a 120V outlet. Without that grounding, the hum somehow caused "porpoising" of the signal line, throwing measurements off by minutes per day. Even after solving that problem I was not happy with the signal noisiness of that setup, as judged by the number of stray dots scattered about the tape.
  4. Success! I scrounged a 10 year old "Logitech 980186-0403 USB Desktop Microphone" from a box in the basement. It had a mic on the end of a long boom. With some precision hacking using a sharp screwdriver I managed to remove the boom from the stand and the microphone from the boom, leaving it dangling from an 8" wire. This I gently affixed to the watch with a rubber band. Those particular microphones are $35 used, but I expect any desktop USB microphone would work as well - Amazon sells one by "Tontec" for $7. Here's what mine looked like after the hack:
Technology Electronic device


The tg Software

This is a repost of my prior instructions for building tg 0.2.3 on Linux Mint 17.1 (an Ubuntu 14.04 derivative). I post them here because order of installation turned out to be crucial, and I would like to save you the trial-and-error hassle.
Code:
[LIST=1]
[*]sudo apt-get install libgtk2.0-dev # install first of several various packages needed for compilation
[*]sudo apt-get install libjack-jackd2-dev # the order of installation is important
[*]sudo apt-get install portaudio19-dev # because libjack must be installed before portaudio
[*]sudo apt-get install libfftw3-dev
[*]sudo apt-get install git # if you don't have git, this is just for downloading the source, which you might prefer doing directly
[*]cd # go to home directory
[*]git clone [EMAIL="[email protected]:vacaboja/tg.git"][email protected]:vacaboja/tg.git[/EMAIL] # this downloads the source from [URL]https://github.com/vacaboja/tg[/URL]
[*]cd tg # change directory to location of source code
[*]make # build the program
[*]./tg # run it!
[/LIST]
The Watches

  1. Seiko SRP615. This watch used the fabulous Seiko 4R36A movement, hacking and hand-winding, until my boy and I wrecked it. The good news is that I got a replacement SII NH36A movement from StarTime Supply for under $50 delivered. Back in the day it had been running -15 seconds/day so I twiddled the knobs inside and managed to get it to a perfect 0s/d for two days. Alas, then my boy bashed a metal stool into my innocently passing arm hard enough to pop the crown into position 3 and pop off one of the spring bars. Fortunately the watch didn't fall because I had it on a Zulu strap. Even so, it reverted to being +60s/d and I couldn't get it any better than +60s/d or -60s/d, despite using a microscope to make adjustments. Eventually I pushed something too far and it broke. Hence the replacement movement. Now it's been runnning on the NH36A for four days, at about +5s/d, with no adjustment whatsoever. I'll probably wait a month before adjusting anything, anyway.
  2. Seiko SKX007. This watch has been running on its 7S26C for a couple months now, and it's never yet been opened. At about -1s/d, I'm reluctant to do so. But I do have a Dagaz thick domed crystal on the way, so I suppose I'll fiddle with it when installing that.

Testing Approach

I mounted the watch into the Ace Timer's microphone stand as usual. Then, using a rubber binder through the spring bars I clamped the USB microphone to its back. I adjusted the input level on my computer until the tg software reliably reported four green bars. The Ace Timer's input levels were left at their default. I adjusted the lift-angle appropriately: 53° for the NH36A and 52° (*) for the 7S26C. After moving the watch into position, I waited a full minute for the movement to settle down before recording the readings. The Ace Timer had its test period set to the default 12 seconds. Test period is not user-configurable for tg, and after a brief search I couldn't find anything in the code to even tell me what it is.

(*) Since testing this I have learned that the correct lift angle for the Seiko 7S26 movement (aka SII NH26) is actually 53°, per the NH25/26 Technical Guide.

Comparison

Overnight Test

I tested each watch in the dial-down position simultaneously with the Ace Timer and tg. I then used Time.is to record the watches' equations of time and left them overnight in that position. Sixteen hours later I checked them again. The Ace Timer was less accurate with the SRP615, but more accurate with the SKX007. I attribute this to the fact that the SRP615 movement is only a few days old, and probably needs breaking in. Specifically:
  1. Seiko SRP615. Ace Timer reported +0 s/d, 282° amplitude, 0.1ms beat error. tg reported +5 s/d, 0.2ms beat error, 270° amplitude. Actual measured time delta after 16 hours was +3 seconds change.
  2. Seiko SKX007. Ace Timer reported +1 s/d, 254° amplitude, 0.0ms beat error. tg reported +5 s/d, 0.1ms beat error, 251° amplitude. Actual measured time delta after 16 hours was 0 seconds change.

Photos

Along the way I took a few photos showing simultaneous measurements. I also took a video. Here they are...

Electronics Technology Electronic device Games Display device


Electronics Technology Electronic device Screen Display device


Here is the video. When I started the video the SRP615 had been running stably for well over a minute in the crown-right position. I adjusted it to dial-down and filmed while it was re-stabilizing. Open it in youtube and go full-screen to realize the high-def.


I'd like to explicitly note that tg consistently gives a reading of +4s/d higher than the Ace Timer. It may vary from +3 to +5, but after stabilization it always settles in around that same difference. That's a clue to something though I'm not sure what.

Conclusion

The tg program is pretty spectacular considering the price. 100% free. You may hassle with installation, and you will hassle with microphones, but your total outlay won't exceed $20. This compares pretty favorably to basically everything else out there. Heck, I paid over $30 for the "tick-o-print" Android app and never did manage to get a good reading off of it, presumably from microphone problems, but I digress. My point is: I was able to get timings from tg for free that were within a few seconds of the $170 Ace Timer No. 1000 timegrapher.

Sure, if you have the funds, the Ace Timer is the better tool. This is principally because it has a dedicated microphone that supplies a few key features.
  1. Easy mounting. Just slide back the bracket, set down the watch and release
  2. Easy positioning. It rotates easily for pitch/yaw/roll. You can test in all the standard positions and anything in between.
  3. Noise filtering. The Ace Timer is very forgiving of external noises. Normal conversation, typing and household noises are not picked up and do not disturb the measurements. Contrast to tg which relies on a normal microphone and requires a very quiet room to work properly.
Apart from the microphone the Ace Timer also feels more reliable. This is a subjective assessment so please bear with me. I say this because it varies less from moment to moment in it's readouts. Given the same conditions, a good meter measures the same metrics every time. The Ace Timer shows more of this stability than the tg software. That may be an artifact of the "test period", which is an open question. Or it may be something to do with external noise. Or it may be an issue with irregular CPU cycle allocation. It's hard to say. But when using the Ace Timer it just feels more stable. Yes, that's a subjective assessment. I've yet to read any review contrasting the $170 hobbyist Ace Timer No. 1000 with something more professional and expensive. Nor do I have any way to confirm which tool's beat error or amplitude is more correct. So what I'm saying is, take that assessment with a grain of salt.

If you lack the funds, or just want to experiment before investing hundreds, then tg is a fabulous! tool. And at the end of the day I would use it precisely the same way I intend to use the Ace Timer. Namely, adjust the beat until it averages 0.0ms in different positions without sacrificing amplitude, then adjust the timing until it averages 0s/d in different positions. That done, wear the watch normally for a few days and make note of the timing error per day. Then I would find the position where tg reported the same timing as observed in actual use, and from there adjust again to zero. I expect the end-result of that process would be equivalent whether I were using tg or the Ace Timer. Which in a way is kind of disappointing as I just laid out $170 for this guy. But I suppose I do at least have a more convenient tool vis-a-vis positioning and noise-resistance, so I'm going to hang onto that.
See less See more
  • Like
Reactions: 5
Re: Ace Timer No. 1000 Timegrapher comparison #2

I'd like to explicitly note that tg consistently gives a reading of +4s/d higher than the Ace Timer. It may vary from +3 to +5, but after stabilization it always settles in around that same difference. That's a clue to something though I'm not sure what.
This is expected because tg currently doesn't have a calibration option. PC sound cards are usually not exact enough, and will give more or less invalid results. However, the error rate is always stable. In your case it seems to be about 4 sec/day. Once tg implements the ability to adjust the rate calculations, it should match up perfectly. :)
  • Like
Reactions: 3
Re: Ace Timer No. 1000 Timegrapher comparison #2

Hello friends, I want to congratulate the creator of tg program is impressive performance. I want to add is something that has been repeated in this forum: The microphone makes the difference. Although the program is highly efficient in capturing sound thanks to the algorithm with which it was provided, the crucial part in analyzing the escape of a clock is to obtain a relatively intelligible signal.

I use several piezo microphones, including one of an old machine clocks analysis. What has worked best for me is the pre-amplifier PYLE PP440. Here is the link:

Thank you very much for the program.

Now I would like to make a request: Add: 1) Calibration 2) clock mode to analyze Swiss watches without escape, pendulum clocks.

In this screenshot I did a test with a very clean recording clock ticking and shows the efficiency of the program. Call it a "perfect" or ideal sound. It is what we seek from a watch to have reliable results.

View attachment 7588146
Guido Velasquez
See less See more
Re: Ace Timer No. 1000 Timegrapher comparison #2

Sorry for the grammatical construction but English is not my native language.

Guido Velasquez
Snakepottery what it says is correct. One can just see the numbers. However, a better understanding of each screen will contribute to better enjoy every feature of the program. As I already understood some things. I is the scale in degrees that allows corresponds to the location of escape steps very useful. I have only one question: Does the point 360 deg. corresponds to the rest position the balance wheel?

Text Line Technology Font Diagram


Lo que dice Snakepottery es correcto. Uno puede simplemente ver los números. Sin embargo, comprender mejor cada pantalla contribuirá a disfrutar mejor cada característica del programa. Mientras ya estoy entendiendo algunas cosas. Me es muy útil la escala en grados que permite corresponde con la ubicación de los pasos del escape. Solo tengo una duda: ¿El punto 360 grados corresponde al la posición de reposo del volante?
See less See more
Re: Ace Timer No. 1000 Timegrapher comparison #2

Here are more details of a side-by-side comparison ...
Just WOW |> very impressive |>

The Ace Timer had its test period set to the default 12 seconds
I feel more comfortable with 60 seconds or more because it can help detecting issues on the gears or at least exclude possible causes. (Not to mention the additional graphs of the sound with a lot of information)

The results of both ACE and TG I would call identical within standard deviation ;-) what we all are trying to measure and interpret is within a time slot of milliseconds to extrapolate to a deviation per day (don't do that on stock market :) ). As far as I know 0.1ms difference between tick and tock gives a difference of about 5 degrees in amplitude on a 28.800 movement or 3 degrees at 21.600 :think:

I'm really curious about reading more of such excellent reports.
Snakepottery what it says is correct. One can just see the numbers. However, a better understanding of each screen will contribute to better enjoy every feature of the program. As I already understood some things. I is the scale in degrees that allows corresponds to the location of escape steps very useful. I have only one question: Does the point 360 deg. corresponds to the rest position the balance wheel?
your question and Snakepottery post #123

Just take the following as an effort from an dilettante but very tenacious amateur and please correct.

If I interpret the two upper graphs the right way the 360 is not the rest position of the balance but the "virtual" maximum deflection. The blue line will give the amplitude / real deflection of the balance which is calculated from time between beginning and end of the tick respectively the tock when the roller passes the pallet fork. The shorter the time it takes for the three pulses (ellipse-stone hitting fork of anchor, fork of anchor hitting ellipse stone, fork hitting banking pin) the faster the rotation of balancewheel in rest position and therefore the higher the amplitude.
The milliseconds for calculation is given underneath. In your picture about 11 - 11.25ms. With 21.600 and liftangle 50 it will be calculated to about 241,6 degrees to the tick-side and about 236,2 to the tock-side. Average is 238,9 degrees.
The lower graph shows both the three parts of tick-pulse and the tock-pulse and if there is any noise in between that should'nt be there. Seems to be ok on your watch.
The vertical graph on the right should be ideally one straight line (or two straight lines very tight) without scattering or wiggly line as depicted in your screenshot. I assume either the pallet-stones or the escape-wheel need cleaning and lubrication. Is there still a wiggly-line when fully wound up? Which movement did you test?
See less See more
  • Like
Reactions: 1
Thanks for your response, that seems to make sense! So the two top graphs, one is the tic and the other is the toc?

It's a great bit of software and in comparison to my timegrapher 1000, pretty accurate. I do however get great variance in beat error between the two, around 5ms. Now given others don't get this, I've put it down to ack if output from the mic. So I've bought an amplifier which should sort it. In terms of timing accuracy,it's within a few seconds, certainly good enough for my purposes, and as tg relies on the sound card clock, probably as good as it gets.
Once I've resolved the beat error, I'll probably sell on the timegrapher and just use tg on my Mac.

Snake


Sent from my iPad using Tapatalk
I got this working great on OSX thanks to the Homebrew formula. I have used two apps for iOS for timing (Hairspring & Watch Tuner) and they both seem very accurate with observed results as well as agree with each other. The s/d seems to vary more with tg however using the same mic setup and generally seems to report slower than the two iOS apps. Is there a technical reason why the timing doesn't seem as stable on tg? (sound card or OS timing limitations?). It seems they would apply to iOS as well.. otherwise really looking forward to the continued development of this. Nice job!
The microphone preamp arrived today, BTec BT26, (cheap and cheerful) , I've connected it up to my Mac and the watch mic, and it works a treat.
The additional amplitude had resolved the beat error variance and in comparison to my timegrapher, the results are almost the same. BE is identical, amplitude within a few degrees, and BPH show -6secs compared to the t1000.

All in all, it close enough for me, the timing errors will be due to the internal clock of the Mac, so if the designer gets a chance to put in some kind of tuning, that will sort that.

Snake


Sent from my iPad using Tapatalk

Hi friends!

I am very late as usual... First of all, thanks to pbnelson for his
review. As far as I know, this is the first time that tg has been publicly
compared to a dedicated machine: awesome work, and very interesting!

I am also happy with the results. My expectation was +-0.5 milliseconds
for the beat error, +-10 degrees for the amplitude, and some constant
error of a few s/d (depending on your sound card) for the rate. The clock
in a sound card, just like any watch or clock, has a daily rate, which we
can express in seconds per day. This rate is, as for any watch or clock,
subject to change with environmental conditions, notably temperature, and
it will also slowly drift with time. A rate of plus or minus a few seconds
per day is typical. So, with all probability, the clock in pbnelson's
sound card is about 5 s/d slow, and this makes the readings taken through
this sound card appear about 5 s/d too high.

Klaus's explanation of the graphs is spot on. During every period (every
back and forth of the balance wheel) the escapement makes two sounds,
which we perceive as a tic and a toc. Each of these sounds is actually a
cluster of closely spaced clicks produced by several parts colliding in
the space of a dozen milliseconds. The lower graph represents the entire
period of the watch, so one tic-toc, the two upper graphs are enlargements
of the tic and the toc portions (highlighted in blue in the lower graph).
The three blobs that you can usually see in the tic and toc graphs are the
traces of the clicks made, from left to right, by the impulse jewel
hitting the fork, by the escapement unlocking (i.e. when the fork begins
to push on the impulse jewel), and finally by the escapement locking
again. If tg works correctly the third click should be aligned on the zero
milliseconds mark, if it is so, then the position of the first one marks
the amplitude over the amplitude scale. Tg also draws a little blue line
to mark the place where it thinks that the first click is.

Calibration is now the most requested feature, so it is next to come!

I have just uploaded a new version of tg. Except bugfixes it has the same
interface as the old one, but the algorithm is multithreaded, so it should
run considerably smoother on multi-core machines (almost all modern
computers). The Windows binary is in the usual place. The source code is
in a branch called "test". I will move it to the master branch as soon as
dmnc's homebrew recipe is confirmed to support the new version (so if you
want to try it on a mac, for now, you have to install manually).
See less See more
  • Like
Reactions: 2
I have used two apps for iOS for timing (Hairspring & Watch Tuner) and they both seem very accurate with observed results as well as agree with each other. The s/d seems to vary more with tg however using the same mic setup and generally seems to report slower than the two iOS apps. Is there a technical reason why the timing doesn't seem as stable on tg?
Hi, sorry, I didn't notice your post. I really do not have much information here to give any meaningful answer. Can you send me a relatively long (say a couple of minutes) recording demonstrating the problem? With it, I can try to figure out if the variability that you see is a bug in tg or what.
need to share my experience - not regarding tg (it's awesome), but how i'm using it.
my 007 is gaining time, it went from about +5s a day to about +50s a day over the past couple weeks, and it's magnetized. i can spin a compass dial around with it. i also realize that i'm drawing causation here...
when I use tg with my macbook, i just set the watch on the mic. this is the only thing i can think of that could cause magnetization, i'm also guessing that the computer can generate enough of a field to cause magnetization. the best part is, i've been checking the watch with tg every couple days..... I set the watch on it and let tg listen for about a minute or so to stabilize (it may not really need much time at all). granted, i don't know for sure, it could be from something else but it's my only working theory.

i haven't taken the watch back off, and i really don't want to with this particular watch. i'm hoping that when i use the demagnetizer (it's the blue ebay one and i know it works from using it on screwdrivers, screws, etc.), it will work without taking the movement out. I've read both that demagnetization (hold the watch on the plate, press the button, wait a bit, then draw the watch away slowly) should be done with just one position, and also that you should do it once, turn 90 degrees and repeat. so when i get home, i'm going to demagnetize from one position, then use tg with an external mic and see before/after differences.

has anyone discovered that they're magnetizing their own watch when testing like this?
See less See more
I would say you probably aren't magnetizing it with the microphone, but rather with the magnetic components inside the laptop. If your Mac has a headset jack that you can plug an iPhone headphone set (the ones with the integrated mic), try that and that will keep you away from the computer itself. I have a non-Mac laptop and I use the iPhone headset mic and it works really quite well. Even with my POS work laptop, I get a good clean signal through the iPhone headset.

EDIT: And I didn't even answer the question...no, I'm not magnetizing my watches by testing them because I keep them away from strong magnetic sources.
  • Like
Reactions: 1
yes, inside the laptop (is what was in my head..), that's what i meant. i've used the iphone headset in the pas also and it works well, especially with this software.

I would say you probably aren't magnetizing it with the microphone, but rather with the magnetic components inside the laptop. If your Mac has a headset jack that you can plug an iPhone headphone set (the ones with the integrated mic), try that and that will keep you away from the computer itself. I have a non-Mac laptop and I use the iPhone headset mic and it works really quite well. Even with my POS work laptop, I get a good clean signal through the iPhone headset.

EDIT: And I didn't even answer the question...no, I'm not magnetizing my watches by testing them because I keep them away from strong magnetic sources.
Hi, sorry, I didn't notice your post. I really do not have much information here to give any meaningful answer. Can you send me a relatively long (say a couple of minutes) recording demonstrating the problem? With it, I can try to figure out if the variability that you see is a bug in tg or what.
I think you actually answered it in a previous post. My issue was tg is reporting 5s slower than the iOS apps I'm using (which reflect reality so I assume is accurate). It could be the explanation is the sound card I'm using in my Mac is just running at an offset than my iPhone with the iOS apps..
Built like a champ for me using brew under OSX 10.11.3. Worked fantastic with a couple of pocket watches. i need to work on a mic setup for smaller wristwatches, for the pocket watches I just used an iphone headphone/mic combo.

Thanks for this.
David
2
Just discovered this thread. Wow. Thank you CW.
Ran the exe on Win10 using a cheap logitech webcam mic:
Analog watch Watch Fashion accessory Auto part Gauge


My Speedbird3 with ETA2824-2 gave following results face up off wrist (~20C):
Text Technology Line Font Pattern


This is within half a second of my off wrist face up real world comparison - like I said... Wow.
Now I need to go an research the difference in shape between my tick and tock to see if I need to be worried :)
See less See more
  • Like
Reactions: 1
141 - 160 of 605 Posts
Top