Blog
Announcing Winners of Screenshot Competition!
We’re excited to announce the winners of the ActivityWatch Screenshot Competition! We received some great submissions, and we’d like to thank everyone who participated. Your contributions will help us showcase ActivityWatch to the world!
Submissions were accepted in the GitHub discussion announcing the competition, and the #screenshots
channel on our Discord.
We’d like to apologize for the delay in announcing the winners. We are grateful for everyone’s patience and enthusiastic participation in this competition.
You can find selected screenshots from the winners on our screenshots page.
The Winners
🥇 1st place: Erik (@thelifeimliving)
For the sheer number of screenshots submitted, and of very high resolution, Erik takes the top spot. Your contribution will greatly help us in showcasing the versatility of ActivityWatch!



🥈 2nd place: Hernan (@realhyperchango)
Hernan showed us how category rules can be set up to get productivity classification instead of just activity classification. This is incredibly useful for users focused on time management.
🥉 3rd place: @BelKed and @maholli
For third place we have a tie between @BelKed and @maholli.
@BelKed showed us an excellent dark mode screenshot. It shows how elegant ActivityWatch can look in different themes.
@maholli showed us a whole month of activity! Good luck with your thesis!
Prizes
All winners will have their screenshots featured on the ActivityWatch website.
We were supposed to have additional prizes, which we still aim to give out, but we have yet to order the swag we planned to ship. However, winners can expect to get swag for free as soon as we order it!
We promise the winners will one day get ActivityWatch swag, including:
- mug
- T-shirt
- stickers
We’ll reach out to the winners to distribute the prizes once we have them. (sorry if it takes a while!)
Next Steps
- A big thank you to everyone who participated! Your contributions are invaluable.
- The selected screenshots will be showcased on our website.
Further Discussion
For further discussion, a GitHub thread has been set up. Feel free to share your thoughts here.
The Future of Time Tracking: AI, Privacy, and Personalization
Table of Contents
Introduction
In an increasingly digital world, time-tracking software like ActivityWatch plays a pivotal role in enhancing productivity and self-awareness. As we look to the future, three key elements stand out: Artificial Intelligence (AI), privacy, and personalization.
The Role of AI in Time Tracking
The Power of Data
While ActivityWatch itself doesn’t currently utilize AI, the data it collects serves as a fertile ground for AI-driven applications. The software logs a comprehensive array of your digital activities, from the websites you visit to the applications you use. This data can be transformed into actionable insights through machine learning algorithms. For example, natural language processing (NLP) could analyze your text-based activities to gauge your focus levels, while clustering algorithms could categorize your activities into productivity zones.
Long-Term Behavioral Trends
AI’s capability to sift through large datasets makes it invaluable for identifying long-term behavioral changes or trends. By applying time-series analysis on your ActivityWatch logs, you can gain insights into how your work habits, focus periods, and even leisure activities evolve over time. This can be particularly useful for self-improvement and for tailoring your work schedule to your natural rhythms.
Day Summaries and Note-Taking
Imagine an AI assistant integrated into ActivityWatch that can not only summarize your day but also take context-aware notes for you. Utilizing speech-to-text algorithms during meetings, it could generate summaries and action items automatically. When you’re working on a project, it could log your key milestones based on your activity data, thereby creating a daily journal without any manual input.
How It Could Work:
- Speech-to-Text: During meetings, the AI assistant could transcribe and summarize key points.
- Text Summarization Algorithms: At the end of the day, a summary of your activities could be generated, highlighting your most productive periods and areas for improvement.
In-Context Suggestions
Think of this feature as a modern, less intrusive version of Clippy. By leveraging real-time analytics and historical data, ActivityWatch could offer spontaneous, in-context suggestions. For instance, if the software detects that you’ve been working on a coding project for an extended period, it could suggest taking a break or even recommend a relevant Stack Overflow thread based on your recent queries.
Technical Details:
- Contextual Bandit Algorithms: These could be used to offer suggestions that are most likely to be useful to you at any given moment.
- Collaborative Filtering: By analyzing data from multiple users, the system could offer suggestions that have been beneficial to people with similar work patterns.
Integrating Brain-Computer Interfaces with Screentime Data: The Next Frontier in Time Tracking
The future of time tracking isn’t just about what you’re doing on your computer; it’s about understanding the cognitive processes that accompany those activities. Building on the pioneering research in my MSc thesis, which explored the classification of brain activity using electroencephalography (EEG) and automated time tracking, we see a new frontier emerging.
The Synergy of EEG and ActivityWatch
ActivityWatch provides a robust framework for tracking digital activities, while EEG devices offer a window into the cognitive state of the user. When combined, these two technologies can provide unprecedented insights into not just what you are doing, but how you are mentally engaging with those activities.
Technical Insights:
- Data Fusion: By synchronizing EEG data with ActivityWatch logs, we can create a multi-modal dataset that captures both behavioral and cognitive aspects.
- Machine Learning: Advanced classifiers based on Riemannian geometry, as demonstrated in my MSc thesis, can be employed to analyze this rich dataset.
Real-World Applications
The practical implications of this integration are vast:
- Personalized Productivity: Imagine a system that knows when you’re most focused and automatically blocks distracting websites during those periods.
- Mental Health Monitoring: By tracking cognitive states alongside digital activities, we can identify stressors and recommend timely interventions.
- Enhanced Learning: For educational software, understanding the cognitive load during different tasks can help adapt the material in real-time to optimize learning.
Ethical and Privacy Considerations
While the potential is exciting, ethical considerations, particularly around privacy and consent, are paramount. All EEG data would be encrypted and stored locally, in line with ActivityWatch’s privacy-first philosophy.
Future Research and Development
As we look to the future, the integration of EEG devices and ActivityWatch opens up new avenues for research, particularly in the realms of cognitive science, human-computer interaction, and even preventive healthcare.
By marrying the behavioral data from ActivityWatch with the cognitive insights from EEG, we’re not just tracking time; we’re understanding it on a whole new level.
Full-Context Tracking: A Double-Edged Sword
Rewind.ai takes time tracking to the next level by offering full-context tracking, capturing not just screen data but also audio and microphone inputs. While this provides a rich dataset that can fuel advanced AI applications, it also introduces a set of challenges and ethical considerations. (Disclosure: I am an investor in Rewind.ai)
Opportunities for AI Applications
The depth of data collected by full-context tracking opens the door to a multitude of AI-driven applications:
- Voice Analytics: By analyzing audio data, AI can gauge the sentiment and tone of meetings, providing insights into team dynamics.
- Content Classification: Advanced machine learning models can automatically categorize screen content, offering a more nuanced understanding of user behavior.
- Real-Time Feedback: With access to both screen and audio data, AI can offer real-time suggestions or alerts, such as flagging potential security risks or recommending breaks based on detected stress levels.
Privacy Concerns
While the wealth of data offers numerous possibilities, it also raises significant privacy concerns:
- Data Encryption: Storing audio and screen data necessitates robust encryption methods to prevent unauthorized access.
- User Consent: It’s crucial to obtain explicit user consent for capturing and analyzing such sensitive data.
- Data Minimization: The principle of collecting only the data that is strictly necessary should be adhered to, in line with GDPR and other privacy regulations.
Resource Consumption
Full-context tracking is not just data-intensive but also resource-intensive:
- Storage: The sheer volume of audio and screen data can quickly consume local storage, requiring efficient data compression algorithms.
- Processing Power: Real-time analysis of such data can be CPU-intensive, potentially affecting system performance.
Rewind.ai has addressed this by leveraging it’s macOS-only nature to utilize Apple’s CoreML framework for on-device AI processing, allowing efficient data compression and real-time analysis with relatively low impact on overall system performance.
Balancing Act: AI, Privacy, and Resources
The challenge lies in striking a balance between leveraging AI’s capabilities and maintaining user privacy and system performance. One potential solution could be edge computing, where data is processed locally on the user’s device, minimizing data transfer and storage while still enabling real-time AI analytics.
The Importance of Privacy
The Privacy Imperative
In a world where data breaches are increasingly common, privacy is paramount. ActivityWatch addresses this by storing all your data locally, ensuring that you have complete control over your information.
The Resource Trade-Off
While full-context tracking offers richer data, it is much more resource-intensive and poses greater privacy risks compared to ActivityWatch’s local storage approach.
The Need for Personalization
Beyond One-Size-Fits-All
ActivityWatch allows for custom plugins and scripts, enabling you to tailor the software to your specific needs. This is crucial in a world where no two users are the same.
The Need for Researcher Tools
The Value of Data in Research
In the realm of behavioral and social sciences, the availability of accurate and comprehensive data is often the cornerstone of impactful research. Traditional methods of data collection, such as surveys and interviews, have their limitations in terms of scale and objectivity. This is where time-tracking tools like ActivityWatch can fill a significant gap.
Addressing the Lack of Data Collection Tooling
One of the challenges researchers face is the lack of specialized tooling for data collection that is both ethical and efficient. ActivityWatch addresses this void by offering a platform that is not only privacy-centric but also highly customizable. Researchers can use custom plugins and scripts to tailor data collection to the specific needs of their study, thereby enhancing the quality and relevance of the data collected.
ERC-Funded Project: A Case Study
ActivityWatch is currently being utilized in a 5-year project funded by the European Research Council. The project aims to delve into the intricacies of human behavior and time management. The use of ActivityWatch in such a high-profile research initiative underscores its value as a reliable tool for academic and scientific inquiry. Learn more about the ERC-funded project here.
WARN-D Research Project: The Broader Context
While not directly using ActivityWatch, the WARN-D research project aims to build a personalized early warning system for mental health by tracking stressors among students. This project highlights the broader societal value of time-tracking data and sets a precedent for how ActivityWatch could be employed in similar research endeavors. Learn more about the WARN-D project here.
By offering a robust, customizable, and privacy-focused platform, ActivityWatch is poised to become an invaluable asset in the toolkit of modern researchers.
Leading the Charge: ActivityWatch’s Role in Shaping the Future of Time Tracking
ActivityWatch is not just another time-tracking tool; it’s a platform that embodies the future of this technology. Situated at the crossroads of data-driven AI applications, stringent privacy measures, and extensive personalization capabilities, ActivityWatch is setting the standard for what time-tracking software can and should be.
By offering a platform that is both customizable and privacy-centric, ActivityWatch provides a unique solution that caters to a diverse user base—from individuals seeking to improve their productivity to researchers aiming to collect valuable data for scientific inquiry.
As we look to the future, ActivityWatch is committed to further enhancing its platform to meet the evolving needs of its users. Whether it’s integrating more advanced data analytics or expanding the range of custom plugins, the roadmap for ActivityWatch is geared towards innovation and user empowerment.
In a world where time is our most valuable resource, ActivityWatch offers a way to make the most of it. By focusing on the key pillars of AI, privacy, and personalization, ActivityWatch is not just keeping pace with the future of time tracking—it’s leading the way.
Conclusion
The future of time tracking is intricately tied to AI, privacy, and personalization. With its focus on these areas, ActivityWatch is well-positioned to lead the way.
If you are excited about this like we are, consider joining the Discord server. We’re always looking for new contributors and ideas!
And if you aren’t using ActivityWatch already, now is the perfect time to start collecting your screentime data!
Comparing ActivityWatch with RescueTime, ManicTime, and Apple ScreenTime
Introduction
In today’s digital landscape, effective time management is more critical than ever. While everyone has 24 hours in a day, how we utilize those hours significantly impacts our productivity and well-being. Time-tracking software has thus become a fundamental tool for individuals and organizations aiming to optimize their time use. This article will conduct a side-by-side comparison of four popular time-tracking applications: ActivityWatch, RescueTime, ManicTime, and Apple ScreenTime.
Feature Comparison
Here’s a table outlining the features of each software:
Feature Category | ActivityWatch | RescueTime | ManicTime | Apple ScreenTime |
---|---|---|---|---|
Tracking Capabilities | Granular tracking of applications, browser activity, custom event tracking. Extensible architecture. | Application and website tracking, limited offline tracking, distraction-blocking features. | Comprehensive computer usage tracking, supports offline activity tagging. | Limited to Apple ecosystem; tracks applications and website usage. No custom event tracking. |
Reporting & Analytics | Rich dashboard with real-time and historical data. Custom reports possible due to open-source nature. | Detailed reports, limited customization. | Highly detailed reports, manual tagging and categorization. | Basic reporting on screen time and app categories, little customization. |
Privacy | Local data storage by default. Robust privacy controls. | Data stored on their servers. | Local and cloud storage options. | Encrypted, on-device storage. Tightly integrated with Apple ecosystem. |
Customizability | High levels due to open-source nature, from UI to tracking and reporting. | Limited to predefined settings and features. | Some customization like tagging and categorization. | Minimal customization, focused on app limits and downtime. |
Pricing | Free and open-source. | Freemium model, premium version offers additional features. | Free version available, paid license for advanced features. | Free but limited to Apple devices. |
Decision Matrix for Use-Cases
Choosing a time-tracking software often depends on specific needs. The following matrix offers suggestions based on different use-cases:
Use-Case | Recommended Software | Reasons |
---|---|---|
Highly Customizable Solution | ActivityWatch | Open-source nature allows for extensive customization, from UI to tracking metrics. |
Privacy-Conscious Users | ActivityWatch | Local data storage by default, with robust privacy controls. |
Multi-platform Support | ActivityWatch, ManicTime, RescueTime |
All three support multiple platforms (ActivityWatch and ManicTime support Linux too). Apple ScreenTime is limited to Apple devices. |
Enterprise Use | RescueTime | Offers team features, data storage on cloud, and centralized reporting. |
Blocking Distractions | RescueTime | Provides distraction-blocking features in the premium version. Note that there are other free and open-source tools for blocking distractions, which is why ActivityWatch doesn’t offer this feature. |
In-depth Reporting | ActivityWatch, ManicTime, RescueTime |
All offer robust reporting capabilities, with ActivityWatch and ManicTime allowing for greater customization. |
Apple Ecosystem | Apple ScreenTime | Seamlessly integrates with Apple devices, from iPhones to Macs. |
Freelancers on Budget | ActivityWatch | Free and open-source with an extensive set of features for individual tracking. |
Offline Activity Tracking | ActivityWatch, ManicTime |
Both support offline activity tagging, making it suitable for tracking non-digital tasks. |
Conclusion
Time-tracking software options abound, each with its unique set of features, advantages, and limitations. While the final choice will ultimately depend on your specific needs, ActivityWatch emerges as a strong contender in multiple categories.
Strengths of ActivityWatch:
- High level of customization thanks to its open-source nature
- Strong commitment to user privacy with local data storage
- Extensive tracking capabilities, including custom event tracking
- Free and open-source, providing a comprehensive feature set without a financial barrier
Competitors’ Strengths:
- RescueTime offers distraction-blocking and enterprise features
- ManicTime provides a versatile tracking environment, including offline tagging
- Apple ScreenTime integrates seamlessly within the Apple ecosystem
In summary, ActivityWatch excels in customizability, privacy, and its free pricing model. It is an ideal choice for users ranging from freelancers to those who prioritize data privacy, all without compromising on tracking capabilities and analytics. If you’re looking for a comprehensive, customizable, and cost-effective time-tracking solution, ActivityWatch may well be the ideal choice for you.
For more alternatives, you can check out alternativeto.net.
Development Update March 2019
Table of Contents
It’s time for another development update!
We are sorry for the long delay in our development updates, but infrequent updates also mean larger updates. The last development update was written about half a year ago, so we have a lot of things to share!
If you don’t want to read all these notes and just want to experience the new beta of ActivityWatch right away, you can download it here!
🏁 Milestones
-
2019-03-09: 🚢 0.8.0 beta 8 was released
-
2019-01-14: 🤖 First aw-android release
-
2019-01-05: ⬇️ We passed 10,000 downloads!
-
2018-12-08: ⚙️ aw-server-rust reached feature parity
-
2018-11-03: 🚢 0.8.0 beta 7 was released
📯 Major News
🤖 ActivityWatch is now in early beta on Android!
We have been working on getting ActivityWatch to Android for a long time (see this issue). There’s a good reason why we think it’s important: in my own analysis, it accounts for almost half of my screen time!
So now we finally have something that you can try out! While not great (yet) there’s a lot to be excited about.
By being backed by our new high-performance implementation of the aw-server written in Rust (see below) it will have the same underlying features and APIs of the desktop version of ActivityWatch, making it a great foundation that will make development easy going forward. The web UI is currently available in the app (but is notably broken in a lot of ways), but we hope to be able to build some native UI elements in the future!
Now we just need to find the time to keep building, but we hope we might be able to find some contributors to help us out with doing so now that we have a solid foundation built on the same APIs already available in ActivityWatch elsewhere!
Get it on the Play Store, or check out the code on GitHub!
⚙️ New high-performance implementation of aw-server written in Rust
While Python is a great language to quickly build new features in, it’s not great for performance or deploying to multiple platforms (especially Android). So @johan-bjareholt took on the tremendous task of reimplementing aw-server in the highly performant and secure programming language Rust.
This is big news for several reasons:
- Since Rust compiles to Android we have built a library for use on Android, letting us avoid reimplement all of ActivityWatch to Android devices specifically (and vastly decreases the time to port future features like sync to Android).
- The high-performance improves battery life on devices like laptops, phones, and tablets.
- The high-performance will make it easier for us to implement weekly summaries
- Having two implementations gives us better testing and encourages work towards common specifications and standards.
The Python implementation will still be used for experimenting with new features, but expect the Rust implementation to be shipped with the normal desktop releases sometime in the future!
✏️ More editor watchers
The community has contributed with many new editor watchers the past few months which we appreciate a lot! They have done some awesome work and most of them are even in a better state than the vim watcher we have written ourselves. Thanks everyone for the awesome work!
- aw-watcher-vscode - Visual Studio Code extension, by @Otto-AA.
- activity-watch-mode - emacs mode forked from wakatime-mode, by @pauldub.
- aw-watcher-jetbrains - JetBrains IntelliJ plugin, by @OlivierMary.
- (Alpha) ActivityWatchVS - Visual Studio plugin, by @LaggAt
🔧 Windows and macOS builds now work again
In v0.8 beta 7 we had issues with the windows bundle due to breaking updates of our dependencies PyInstaller and jsonschema. This is now fixed and our windows builds should now work properly again in v0.8 beta 8.
Back in 0.8 beta 6 macOS support was also broken, but that has been working for a while now since beta 7 which has been around for a few months already.
## 📦 Import and export The import and export APIs now work consistently (aw-server#41). We have added a UI to export all buckets and to import buckets. Migrating your activitywatch data to another computer is now as easy as using one export button on one computer, moving the file to your new computer and upload it in with the import button! Import and export can also be used if you want to try out the new aw-server-rust and want to move over all your previously logged aw-server data.
🏃♀️ Going forward
- 🛰️ Raw SQL datastore
- @johan-bjareholt has merged a raw SQLite implementation of the datastore that has performance improvements compared to the current Peewee SQLite datastore. Automatic migration from the old datastore to the new one is supported. The new datastore is however not the default yet, we need more user-testing before doing that. (aw-core#57)
- 🔄 Decentralized sync
- Still being worked on, see last developer update for more info and the latest comments in the issue.
- ⏱️ Stopwatch beta
- The web-ui now has a stopwatch watcher where you can manually set timers with different tags to track for example how long you have been at work, how long you have been working on a specific project or whatever else you can come up with it being useful for.
- It’s is very limited and lacks some important features, such as manually editing start/stop times. There is also a lack of visualization, it currently only shows a list of the individual entries.
- 🖥️ Wayland support
- @johan-bjareholt has had discussions with a few wayland compositor devs and have tried to convince the xdg-desktop-portal API bundle to add a protocol for exposing focused windows appname and title, but it’s a hard sell unfortunately…
- 🗓️ Weekly summary view
- Weekly/monthly/yearly summaries is a highly requested feature and a high priority for us. We have acceptable performance in aw-server to support weekly summaries, and when we switch over to aw-server-rust we hope to be able to support monthly summaries without issues. Summaries longer than a month will need more work though and won’t be supported in the near future.
- 🤖 Better Android version
- The Android app, while technically released, isn’t “production ready” yet. We would ❤️ contributions from people with some Android development experience!
Support us! ❤️ 💸
Last month we only received $26 in donations, that means your donation could be extra important to us. Do you use ActivityWatch and want to see many updates like this in the future? Please support us with donations, it really does make a difference! All donation methods are listed on our donations page.
📧 Stay up to date
Want to get notified when we have more amazing news to share? Sign up on the forum, subscribe to the newsletter, and follow us on Twitter!
This post was originally published on the forum. It has been reposted here on the blog for archival purposes.
Development Update August 2018
Table of Contents
It’s now been 104 days since the last “bimonthly” development update, this means:
- It’s time for a new one, and this is a unusually good “bimonthly” update. :ok_hand:
- Development updates will now be quarterly.
Milestones 🏁
2018-05-28: We released v0.8.0b2. 🚢
- Major performance improvement: pre-merging of heartbeats. (aw-client#33)
- Query2 now supports a syntax for creating lists, allowing queries to return multiple things. (aw-core#50)
- View full diff on GitHub.
2018-05-30: We released v0.8.0b3. 🚢
- Major performance improvements by pre-merging heartbeats on the server and client-side
- Improved design of the web UI
- Implemented flooding (aw-core#58) which significantly improving the accuracy some types of events (notably window events, see this issue for numbers).
- View full diff on GitHub.
2018-06-22: We hit 1000 stars on GitHub 🌟
2018-07-03: We hit 5000 downloads ⬇️ and we released v0.8.0b4! 🚢
- View full diff on GitHub.
2018-07-09: We released v0.8.0b5. 🚢
- View full diff on GitHub.
2018-07-17: We hit over 200 daily active users for the web watcher. :chart_with_upwards_trend:
2018-08-14: We hit 6000 downloads ⬇️
2018-08-27: We released v0.8.0b6. 🚢
- Added a new timeline visualization to better visualize event history. (aw-webui#97)
- Fixed the highly popular Windows-specific issue where all modules started by aw-qt also opened a terminal window which they ran in. (activitywatch#212)
- View full diff on GitHub.
Unknown date:
- At some point we implemented support for the text editors Vim and VSCode, probably in v0.8.0b4. This included a visualization in the web UI where you can see the most edited files, most edited languages, and most edited projects!
Going forward 🏃♀️
- Raw SQL datastore
- @johan-bjareholt is still working on a raw SQL implementation of the Peewee datastore that is expected to give further performance improvements, among other things. (aw-core#57)
- Import bucket API (aw-server#41)
- And later web UI button to make export/import cycle possible, enabling the ability to manually move data between instances with a simple export file.
- Decentralized sync
- We’ve started researching the possibility for a very simple type of sync where you choose a folder that is being synced by Syncthing/Dropbox/Google Drive which is then used to exchange data between hosts. (aw-server#50)
- A huge step towards finally implementing a decentralized sync MVP (thanks to Syncthing ❤️).
What else?
During the summer @ErikBjare, @johan-bjareholt, @Powersource, and three other wonderful people have been developing Thankful under the group name Superuser Labs. We think we’re onto something kinda amazing, but we have a bit to go before it’s an improvement over existing donation methods.
Support us! ❤️ 💸
Last month we only received $13 in donations (after fees), that means your donation could be extra important to us. Do you use ActivityWatch and want to see many updates like this in the future? Support us on Patreon or OpenCollective!
This post was originally published on the forum. It has been reposted here on the blog for archival purposes.
Development Update May 2018
Table of Contents
On request we’ve decided to start doing these bimonthly development updates in order to keep you all updated about how development is progressing. It might take a few updates for us to get this going, but we’ll get there!
Milestones
May 7th: We finally released v0.8.0b1. It’s been our first release since November 2017 and is the first beta release of the upcoming (and amazing) new v0.8 release.
May 15th: We hit 4000 downloads 🌟
Improvements
- Implemented our query2 querying language and rewrote much of the visualization code to use it. This is a huge step forward for future visualization work. (aw-core#46, aw-server#35, aw-webui#48)
- Added a query explorer in the web UI to help with testing queries. (aw-webui#64)
- Made watchers more resilient by switching to a new type of request queue. (aw-client#28)
- Started developing
aw-client-js
(aw-client-js#2) and switched to using it inaw-webui
(aw-webui#62). - The web UI now has a view for the most-visited domains. (this commit)
- The web UI now has a button for removing buckets. (this commit)
- We now have a package on the AUR for easy installation on Arch Linux!
- And a bunch of smaller bugfixes and reliability improvements.
Going forward
We’ve been hard at work trying to improve the performance of ActivityWatch (activitywatch#98) using several approaches:
- Switching to a pure-SQL implementation of the SQLite datastore. (aw-core#57)
- Pre-merging of heartbeat events. (aw-client#33)
We’ll also spend a considerate amount of time developing ActivityWatch this coming summer as we’re a team of five people who will be working on our related project Thankful. Certainly something to look forward to!
Do you like ActivityWatch and hope to see many updates like this in the future? Support us on Patreon!
This post was originally published on the forum. It has been reposted here on the blog for archival purposes.