pace-rs / pace Goto Github PK
View Code? Open in Web Editor NEWMindful Time Tracking: Simplify Your Focus and Boost Productivity Effortlessly.
Home Page: https://pace.cli.rs
License: GNU Affero General Public License v3.0
Mindful Time Tracking: Simplify Your Focus and Boost Productivity Effortlessly.
Home Page: https://pace.cli.rs
License: GNU Affero General Public License v3.0
While the pace craft setup
command has significantly improved the onboarding experience, there's an opportunity to enhance it further by introducing real-time validation for user inputs. This feature aims to ensure that all configuration values provided by users during the setup process are validated on-the-fly, minimizing common configuration errors and streamlining the setup experience.
pace
setup process by ensuring only valid configurations are saved.Real-Time Input Validation
Extended Configuration Options
pace setup config
command to include prompts for additional configuration values, enhancing customization options for users.Validation Framework Integration
I invite all contributors, especially those with experience in CLI tools and user input validation, to provide their feedback and suggestions on:
By introducing real-time validation for configuration inputs in the pace setup config
command, we aim to make the onboarding process even smoother and more user-friendly. This enhancement will not only save users time by preventing common mistakes but also strengthen the overall reliability of the pace
configuration process.
As Pace continues to grow and evolve, ensuring high-quality code becomes increasingly critical. This issue aims to address the current gaps in test coverage and testability of the Pace project and its libraries. By focusing on enhancing our testing infrastructure and practices, we can significantly reduce bugs, improve stability, and ensure that new features meet our standards for quality and reliability.
Codebase Audit for Test Coverage
Refactor for Testability
Expand Test Suite
Tooling Integration
Documentation and Guidelines
Continuous Improvement
We welcome contributions from the community to help achieve these objectives. Whether it's writing tests, refactoring for better testability, or improving our testing infrastructure, every contribution counts. If you're interested in helping, please comment on this issue with the areas you'd like to work on, or propose new ideas for enhancing our testing practices.
Improving testability and increasing code coverage are essential steps toward maintaining the Pace project's quality and reliability. With a solid testing foundation, we can confidently continue to develop and expand Pace, knowing that we have the practices and infrastructure in place to ensure its stability and performance.
I initially implemented the storage model for the activity log based on the Toml file format.
When we begin a new activity, we parse the log with all entries, and then we append it in memory to the vector and write the whole activity log back into the file.
When we end or update an activity, we do the same thing.
I think that has several disadvantages, e.g. when there is an error during writing back the file, it could be damaged and the activity log destroyed. Also, it will take longer and longer to parse it, with activities becoming more and more. I need to benchmark that, it could be negligible with a few thousand activities, which is unlikely to happen, as users might archive their activity log monthly when the archival feature is implemented.
I could refactor the entire model to an event based one, so the log file is really append-only and only writes to the end of the file. But I'm actually not sure if this makes sense at this point, because I want to implement the storage in a SQLite database soonish, which would make this obsolete. Because I don't think we want to do it event based in the database, as it's much easier to query for a record and update it or even batch update records.
The reason I initially used Toml was so users can edit it within their favourite text editor, and I found that kind of useful as I used that a lot to edit activities in bartib
. I think this would become less useful, when I reimplement it in a way, that only events are stored. Because then it's not as easy to determine any more, what the actual status, duration etc. of an activity really is. To determine that, we would need to parse all activities in a certain time frame and then merge the events. Which will be much more complicated.
Pros:
Cons:
Pros:
Cons:
Pros:
Cons:
This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.
These branches will be created by Renovate only once you click their checkbox below.
These updates are currently rate-limited. Click on a checkbox below to force their creation now.
serde
, serde_derive
)These updates have all been created already. Click a checkbox below to force a retry/rebase of any.
These are blocked by an existing closed PR and will not be recreated unless you click a checkbox below.
Cargo.toml
abscissa_core 0.7.0
assert_cmd 2.0.14
chrono 0.4.35
chrono-tz 0.8.6
clap 4
clap_complete 4.5.1
clap_complete_nushell 4.5.1
derive_more 0.99.17
dialoguer 0.11.0
diesel 2.1.5
directories 5.0.1
displaydoc 0.2.4
enum_dispatch 0.3.12
eyre 0.6.12
getset 0.1.2
human-panic 1.2.3
humantime 2.1.0
insta 1.36.1
insta-cmd 0.5.0
itertools 0.12.1
libsqlite3-sys 0.27
merge 0.1.0
miette 7.2.0
once_cell 1.19.0
open 5.1.2
parking_lot 0.12.1
predicates 3.1.0
rayon 1.10.0
rstest 0.18.2
serde 1.0.197
serde_derive 1.0.197
serde_json 1.0.114
similar-asserts 1.5.0
simplelog 0.12.2
strum 0.26.2
strum_macros 0.26.2
tabled 0.15.0
tempfile 3.10.1
tera 1.19.1
thiserror 1.0.58
toml 0.8.12
tracing 0.1.40
typed-builder 0.18.1
ulid 1.1.2
wildmatch 2.3.3
crates/cli/Cargo.toml
crates/core/Cargo.toml
crates/time/Cargo.toml
.github/workflows/audit.yaml
actions/checkout v4
dtolnay/rust-toolchain v1
Swatinem/rust-cache v2
rustsec/audit-check v1
actions/checkout v4
EmbarkStudios/cargo-deny-action v1
actions/checkout v4
actions/checkout v4
.github/workflows/ci.yaml
actions/checkout v4
dtolnay/rust-toolchain v1
actions/checkout v4
dtolnay/rust-toolchain v1
Swatinem/rust-cache v2
actions/checkout v4
dtolnay/rust-toolchain v1
Swatinem/rust-cache v2
actions/checkout v4
actions/checkout v4
taiki-e/install-action v2
dtolnay/rust-toolchain v1
Swatinem/rust-cache v2
actions/upload-artifact v3
actions/checkout v4
actions/checkout v4
dtolnay/rust-toolchain v1
Swatinem/rust-cache v2
actions/checkout v4
taiki-e/install-action v2
actions/checkout v4
.github/workflows/coverage.yaml
actions/checkout v4
taiki-e/install-action v2
codecov/codecov-action v4
.github/workflows/lint-docs.yaml
actions/checkout v4
dprint/check v2.2
.github/workflows/release-plz.yml
actions/checkout v4
MarcoIeni/release-plz-action v0.5
.github/workflows/release.yml
actions/checkout v4
actions/upload-artifact v4
actions/checkout v4
swatinem/rust-cache v2
actions/download-artifact v4
actions/upload-artifact v4
actions/checkout v4
actions/download-artifact v4
actions/upload-artifact v4
actions/checkout v4
actions/download-artifact v4
actions/upload-artifact v4
actions/checkout v4
actions/download-artifact v4
actions/checkout v4
actions/download-artifact v4
ncipollo/release-action v1
ubuntu 20.04
ubuntu 20.04
ubuntu 20.04
ubuntu 20.04
.github/workflows/valgrind.yml
actions/checkout v4
The pace
CLI currently lacks a comprehensive way to review and summarize time spent on various activities. Users need an intuitive command to generate a detailed report of their activities, grouped by categories and subcategories, with total time spent on each. The proposed review
command aims to fill this gap by aggregating activity data and presenting it in a structured and readable format.
review
command that aggregates activity data.Data Aggregation Logic (pace_core)
activities_<date>.pace.toml
and any associated activity logs.Command Implementation (pace)
review
command in the CLI interface using clap
.review
command.Output Formatting (pace_core)
--from
and --to
flags.Feedback is requested from contributors and users on the following:
Something like a docs
command could be helpful:
//! `docs` subcommand
use abscissa_core::{status_err, Application, Command, Runnable, Shutdown};
use clap::Args;
use crate::application::PACE_APP;
/// Opens the documentation.
#[derive(Command, Debug, Args, Clone)]
pub struct DocsCmd {
dev: bool
}
impl Runnable for DocsCmd {
fn run(&self) {
match open::that("https://pace.cli.rs/docs") {
Ok(_) => {}
Err(err) => {
status_err!("{}", err);
PACE_APP.shutdown(Shutdown::Crash);
}
};
}
}
tbd, check what we need now and in the future
To further enhance the onboarding experience for new pace
users, we propose the addition of a "First Activity Wizard." This interactive guide will walk users through the process of logging their first activity, demonstrating the core functionality of pace
and ensuring users are comfortable with the basics of the tool from the outset.
pace
.pace
as part of the setup process, improving retention and satisfaction.Wizard Design and Flow
Interactive CLI Implementation
clap
, dialoguer
, or similar crates to create interactive prompts guiding the user through the activity logging process.Validation and Feedback Mechanisms
Documentation and Help Integration
Feedback and ideas are welcome on several fronts:
The First Activity Wizard is envisioned as a key part of making pace
accessible and inviting to new users. By guiding them through logging their first activity, we aim to demystify the process and showcase the simplicity and value of using pace
for productivity tracking. This enhancement is about building confidence and competence in new users, setting them up for success with pace
.
tbd
Either make it general directly, so we can use a different database from the get go, or implement for SQLiteDatabaseStorage
first and then generalize after first implementation.
The current onboarding experience for new users of the pace
CLI tool is not as intuitive or welcoming as it could be. New users are immediately faced with a ParentDirNotFound
error when attempting to record a new activity without having a pace.toml
configuration file in place. This issue aims to outline and propose enhancements to streamline the initial setup process, making pace
more accessible and user-friendly for first-time users.
pace
without encountering errors.Support PACE_HOME
Environment Variable and OS-Dependent Directories
PACE_HOME
environment variable to determine a custom configuration location.directories
crate to find suitable OS-dependent directories for storing pace.toml
when PACE_HOME
is not set.Interactive pace setup
Command
pace setup
command to guide users through creating a global pace.toml
.dialoguer
crate for creating terminal prompts to gather user preferences.I invite all contributors and users to provide feedback on these proposed enhancements. Your insights are valuable to ensure we make pace
as user-friendly and robust as possible. Specifically, I'm looking for feedback on:
pace setup
process.Improving the onboarding experience is crucial for growing pace
's user base and ensuring new users can start tracking their activities with minimal friction. By implementing these enhancements, we can make pace
not only more accessible to newcomers, but also a delight to use right from the start.
This would also make it easier to integrate with 3rd party services. E.g., we could let pace sync with the GitHub issues for a repository and pull in the repository as a project, and it's issues as tasks while people would then be able to log the time they are working on certain issues.
Summary:
Data Storage and Safety:
Data Import:
pace import -t clockify times.csv
).Data Export:
HTML Templating for Reports:
Testing:
Cross-Platform and Syncing:
Originally posted by @Byron in Byron/byron#4 (comment)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.