Not long ago I read a comment on Hacker News about tips to improve one’s performance as a developer; it recommended a system of recording oneself while working and someone suggested uploading the videos to YouTube (as private or unlisted) for future revision and as a backup.
I liked the idea so I wanted to give it a try myself. Of course, like most of the stuff I do, the practicality of it was not as important as the chance to see how I would implement a system to support such workflow.
I landed with something I’m fairly happy with, because most of the process is automated. These are the ingredients:
- I’m using Taskwarrior to keep track of what I’m doing right now.
- I also integrate it with Timewarrior which keeps track of how long I take in each task. This also enabled some nice features in my workflow as we will see.
- OBS Studio which is a multiplatform, customizable screencast recorder.
The workflow
- I add task to Taskwarrior.
- When I run
task start TASK_ID
it will start recording a screencast automatically (no UI is shown other than a discreet systray icon).- It will also call a Timewarrior hook to track the time.
- When I run
task stop TASK_ID
it will stop the screen cast and stop tracking time. - At the end of the day (or the week, or whenever), I run a program that merges all the videos for a particular day and pushes them to YouTube using the name of the most used Taskwarrior tag, and other metadata. This also deletes the originals when the video upload finishes successfully.
Show me the code
I pushed the code I’m using to Github: https://github.com/casidiablo/hippo-critical . Keep in mind it is tailored to my usecase; I don’t expect it to work for anyone without some tweaking).
These are the things I had to do before I could fully automate this:
- Export OBS Studio settings: basically, manually create a Profile and Scene Collection that you are satisfied with. The one I’m using records my screen, my face at the bottom of the screen, my mic and whatever I’m listening to. Then you can export it and reference it when the stream starts.
- Install Taskwarrior’s Timewarrior hook
- Install a custom Taskwarrior hook to trigger OBS everytime you start/stop a task: https://github.com/casidiablo/hippo-critical/blob/master/on-modify.obs
- Get credentials for the YouTube API: I’m using https://github.com/tokland/youtube-upload to publish the video. Follow the docs of this repo to get the proper credentials.
End result:
Final thoughts
- Using Timewarrior enables very interesting use cases:
- I’m using the export feature to get the tags used for each daily session, so I can rank it and have a sensical title for the video.
- It should be fairly easy to use tags to filter out stuff you might not want to upload, or to push different videos for each tag, etc.
- I don’t like the idea of pushing this to YouTube, but whatever. The videos are
private and I am pretty much using them as a free storage system.
- I find it funny that all of the videos have Copyright complaints, because I listen to a lot of music while coding.
- I would use this if I were a freelancer to track my self and share it with my clients.
- More ideas:
- Track which applications I used and add it to the video description.
- Add all the individual sessions to the description with links to their start time.