Where do you guys need the most help?

let me start off by saying you guys just saved me a LOOOT of effort. This is almost exactly like an Idea I’ve been fleshing out for a couple years of school but didn’t feel competent enough as a developer to tackle.

I definitely want to help you guys make this into something amazing. Something like this was pretty much the cornerstone of a lot of project Ideas I planned on pursuing when I actually had money.

I saw when installing that you guys don’t have much in terms of build testing, multiclient is a WIP and not much in terms of security. I don’t have much else going on (other than interview prep) so where do you guys feel like you need help the most?

Hey. I created an account just to reply to you. To answer your question in the general case, take a look at the list of issues for a repo to see if there’s anything you can fix. That’s usually a good place to start, and will get you familiar with the code base (and developers) for making bigger contributions down the line. It’s usually considered polite to open an issue discussing a feature you are interested in creating instead of writing the code and opening a pull request, since there may be important things to consider first. That being said, I never heard of anyone turning down a PR full of tests lol :slight_smile:

The other thing I wanted to say (and the reason I made an account to reply) is that I read a lot of myself in your comments about projects and ideas. I hope I can encourage you to start your side projects as soon as you are able (like tonight, really), and not wait to try and find a moment when things are “just right” for you to start them. It’s a trap, because there will never be a point in your life when you think to yourself that you have enough money to start a side project. Just start writing code (or anything you’ve always wanted to do) and don’t look back!

Happy to hear that you find the project useful and would like to contribute :slight_smile:

There’s actually even a “Good first issue” tag which you can filter on, I’m sure there are more than just these ones though which we’ve forgotten to put the tag on.

https://github.com/ActivityWatch/activitywatch/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22

If it’s something small with a simple solution it’s fine to do a PR right away, the biggest reason for making an issue first I think is if the solution is not something obvious which we need to agree on to avoid the risk of having to rewrite it, that will save both of us time and effort.

It’s a trap, because there will never be a point in your life when you think to yourself that you have enough money to start a side project. Just start writing code (or anything you’ve always wanted to do) and don’t look back!

at this point it mainly is an issue of money.
EDIT: to clarify I don’t currently have a job(currently looking), and while I have some money put up, I’m going to have to pay for my last semester of college myself (only 1 remote class). so my budget is pretty tight.

I’ll give an example with 2 projects but it holds for almost all of my projects that have to do with self-monitoring:

Argos is a project I did for my capstone (the backend and the structure of the project was all me). The original Idea was to have a single server handling an arbitrary number of static cameras(most likely IP cams) which would execute routines based off of what the user was choosing to monitor. It could handle everything from being a security system to being the real world component of something like activity watch. It’s currently in stasis because I decided to go a different direction. namely separation of the event-handler/server from the routines, with the cameras being devices like Pi’s that could handle more complicated routines themselves. Everything would still be on the same LAN. The reason for that was two fold: Even best case scenario it couldn’t handle an arbiturary number of cameras, especially if each one had multiple purposes, while still collecting data fast enough for the things that require real time data (60fps or higher). The other reason was that I realized I was trying to make a self-hosted surveillance system a toddler could use, and while my goal was to give people a set of tools to better quantitate the qualitative, I realized it had a lot of potential for commercial abuse. seeing the amount of post asking about employee monitoring on here kind of confirmed that in that case this was a better direction. But each of those cameras would cost at the lowest around $75 and that’s if I don’t need to do something where I need to invest in equipment better suited for DL models, plus I don’t have a dedicated server (I plan on it once I start working)

the second thing was this.

almost all my projects that have to do with self quantification follow this trend: devices which collect some kind of data which is then controlled by a server hosted on my LAN. software is cheap/free, hardware isn’t. I don’t even have a LAN right now. lol I’m tethering through my phone.

If it’s something small with a simple solution it’s fine to do a PR right away, the biggest reason for making an issue first I think is if the solution is not something obvious which we need to agree on to avoid the risk of having to rewrite it, that will save both of us time and effort.

Noted.

I was wondering where you guys felt like the project needed the most work at the moment? or the what you guys felt like have been needing to be done for a while but it just keeps getting pushed back because other parts of the project required your attention.

Currently it unfortunately feels like a lot of things have been started, but few has been finished.
For example:

  • macOS support improvements (started by xylix with great progress, some things are still not merged and WIP though)
  • syncing (which ErikBjare worked on, progress has been stalled on that for a couple of months now though)
  • aw-server-rust migration (that’s on me, lots of progress has been made and I think it’s almost ready, needs some more testing and user testing first however)

I would recommend starting with just a few smaller issues to understand the components.
Once you have done something like that you could start with something larger, such as maybe with some highly requested feature which has been requested but no one has started working on yet (such as this maybe? Add an "Exclude" list)

I use linux as my daily driver(fedora specifically, though tempted to go back to arch), but I can test windows or mac stuff in a VM. I’d rather avoid that though because I’m nowhere near as comfortable with those operating systems.

syncing and migration I’ll try to help with once I’ve contributed more and have a better understanding of the overall project. both are necessary for my use case: a locally hosted server integrating data from a few computers and lot of IOT devices.

I have a few ideas on future contributions on the security front but I don’t want to promise anything, as it’s things that I’m still learning: SELinux policies, potentially a system level keylogger for wayland(extending afk past x11), or trying to setup reproducible builds.

as far as what I can do right now, what do you think of me adding type casting to the python functions, and also what do you think of adding pytest as a dependency? I’m just now getting into unit testing, and this would be a good way for me to get practice with it. From what I read, pytest seems to be generally preferred to unit test from the standard library.

I could also write systemd timers, services, and slices for the things that you want running as a daemon.

EDIT: I also know java fairly well, and have some experience with Android Apps.

We already use mypy for aw-core, but as we are moving to aw-server-rust it’s getting less and less used. We already use pytest so that’s not an issue.

A system level logger might be a good idea, I have a working Wayland watcher but it currently only works on a few compositors which have implemented two specific Wayland protocols (see aw-watcher-window-wayland).

We have tried using systems services for activitywatch and it works great for the server, but the watchers are not possible because they are dependent on a graphical environment.

But now that I think of it, another project which has been stalled is the activitywatch-deb repo which builds a .deb for Debian. It would be cool if we could finish that up and build it automatically for each release with the CI.

It is still possible, at least as user services. I’m not sure about system level services. I did that here.
user level services are generally placed in $HOME/.config/systemd/user directory. you can set them multiple ones up like this:

systemctl --user enable $service_in_question

note that they will probably have to made in an automated fashion, as systemd doesn’t use environment variables and requires absolute paths, at least since the last time I checked. that may have changed. so either there would have to be created from a template or activity watch would need a standard location. The former is definitely better than the latter.

I can’t link it but there are implementations of a kernel level logger using bpf, which has the advantage that it can be enabled/disabled at runtime. So long as it’s set up where only the user can access only the users data or by creating a group for activity watch programs, it may be a more system agnostic way to handle keylogging (though i’m not sure if mac and windows are implementing bpf yet)

We already have user service files for aw-server and aw-server-rust, the issue is with the watchers which depend on Xorg/wayland. Last time I checked graphical-session.target did not exist, so maybe it’s possible to do now. Feel free to give it a try!

The risk with having it on the kernel level is that it will likely require root permissions and we want to avoid that if possible (and I definitely don’t think we should have it on macOS and windows). Most Wayland compositors support the idle.xml protocol which is more reliable I think. The hard part is getting the appname and title as the APIs for that are fragmented across most compositors.