To Dream of Magick

FitnessTrax 0.1.0

Savanni D'Gerinel 27 Mar, 2020
The Streets at Night, 2019-09

Hello, and welcome back!

Today, I get to announce that I have release FitnessTrax 0.1!

FitnessTrax is a health and workout tracking program designed for individual users and following the privacy policy of keeping all of your data on your own computer. Data that lives there cannot be mined and exploited by third party companies that may not really have your privacy in mind.

This is the first version of the application that I feel is suitable for home users. While it is rather ugly, and limited at this time, it is also entirely usable. Over the next few releases, I plan to style the application nicely and to add many other pieces of information to the tracking system.

FitnessTrax is a GTK 3 application. It can currently only be installed from source. A NixOS derivation will be available soon. I am not currently working on installation from Crates.IO, on Ubuntu, or with Flatpack, but all three of these are on my roadmap.

History

This is the culmination of many years of work and learning.

I first started tracking my weight and my bike rides in 2003. I used nothing more than a couple of plain text files. For a long time, that worked, but graphs were impossible, and it was not possible for me to get a coherent view of any particular day in my history without reading information from many different places.

In 2013, I finally started trying to put all of the information into a single database of sorts. From the beginning, I had no desire to set up a separate database server. Aside from simply being overkill for an app that will only recieve a few writes every day, a separate server increases the effort necessary to install an application, and makes data backups significantly harder.

So, I started with a SQLite database and a Haskell web service. Over the years I migrated from SQLite to building an embedded time series database, then from Haskell to Haskell and Javascript, then to Rust and Javascript, Rust and Typescript, and finally to a Rust-only native GTK application.

Over the years I modified, updated, and tweaked the various data models into something that mostly fit the patterns that I could understand. I settled, at long last, on the Record data structure, then defined Weight, Steps, TimeDistance, Duration, and SetRep as records. Further, in my time at Cloud City I learned from several people who are very good at architecting user interfaces, and that has lead to the internal architecture of my application.

It may seem silly that an application that is little more than a glorified spreadsheet could take so long to build. But it should be known that I have developed this application mostly on my own, and have taken many false steps in the process. I have learned a lot, most of which I hope to one day apply to my career. I do not think that I could have ever done any better.


Saluton, kaj bonvenon reen!

Hodiaŭ, mi povas anonci, ke mi cirkuligis FitnessTrax, versio 0.1!

FitnessTrax estas sana kaj trejnada programo, ke estas konstrukcita por individua uzantoj, kaj sekvas la privatecan politikon de resti ĉion de via dateno sur via propra komputilo. Dateno ke vivas tie, ne povas esti eksplautata de kompanio, ke ne eble konsideras vian privatecon.

Tio estas la unua versio de la programo, ke mi pensas estas taŭga por hejmaj uzantoj. Dum ĝi estas malbela kaj limigita nuntempe, ĝi estas uzebla. Dum la sekvaj kelkaj versioj, mi planas bele stiligi la programon, kaj aldoni multajn aliajn datenojn.

FitnessTrax estas GTK 3 programon. Ĝi aktuale povas instalita de fonto. NixOS derivado baldaŭ estos havebla. Mi ne aktuale faras instalado de Crates.IO, Ubuntu, aŭ Flatpack, sed ĉiuj tri estas en mia plano.

Historio

Ĉi tio estas la kulmino de multaj jaroj da laboro kaj studado.

Mi unue komencis kroniki miajn pezon kaj biciklajn veturojn en 2003. Mi nur uzis simplajn tekstajn dosierojn. Tio funkcias dum longa tempo, sed estas neebla fari grafeojn, kaj mi ne povas vidi koheran bildon de unu tago en mia historio sen legi el multaj diversaj dosieroj.

En 2013, mi komencis provi meti ciun informon al unu datumbazon. Mi neniam volis agorda apartan datumbazoservilo. Krom esti tre kompleksa por programo, ke nur ricevos kelkajn skribojn po tago, aparta datumbazoservilo pliigas la penon necesan por instali aplikon, kaj malfaciligas sekurkopiojn.

Do, mi komencis kun SQLite datumbazo kaj Haskell retservilo. Dum la jaroj, mi migris el SQLite al enigita tempa seria datambuzo, tiam el Haskell al Haskell kaj Javascript, tiam al Rust kaj Javascript, Rust kaj Typescript, kaj finfine al Rust en denaska GTK aplikado.

Dum la jaroj, mi provis multajn reprezentojn de la datumoj ĝis mi havis ion, ke plejparte taŭgis la padronojn. Mi akceptis la Rekordan datumstrukturon, tiam mi difinis Pezon, Paŝojn, Tempo/Distancon, Daŭron, kaj SetRep kiel Rekordoj. En mia tempo kun Cloud City, mi lernis el diversaj uloj, kiuj estas tre bonaj pri arkitekturo, ke mi komprenis kiel konstruii mian aplikadon.

Eble ŝajnas stulte, ke aplikado kiu nur estas glorigita kalkultabelo, povas daŭri tiom da tempo por konstrui. Sciu ke mi konstruis tiun aplikadon sen helpo, kaj mi faris multajn erarojn. Mi ekkonis multe, kaj mi esperas, ke mi uzu tion en mia kariero. Mi ne pensas ke mi povis fari pli bone.


Dreamer, Shaper, Seeker, Maker