background-shape
feature-image

Introduction

As a programming freelancer with a wide area of expertise, I sometimes jungle with very different projects. From working in Rust developing blockchain to image analysis using deep learning, I need a flexible application where I can store my thoughts, my data, and my scheduling.

Creating a custom application tailored to your needs is not ideal because we end up spending more time maintaining the application than working on your projects. In this case, I took the leap and developed OpenJournal with these criteria in mind:

  • Low footprint
  • Integrated with the OS.
  • Smart Markdown syntax
  • Supporting calculations and conversions
  • Image saving with drag and drop
  • Calendar
  • Alarms

Development

Tools

As a Qt developer, I choose the Qt framework for this project. The QMarkdownTextEdit and the QWebEngine make it easy to concentrate on the features instead of the Markdown parsing and rendering. For the calculation, I used the wonderful Qalculate! project.

The data are stored in an SQLite database for efficiency. We left the possibility to connect to a MariaDB server if several users want to share the same journal or wish to password-secure their own (at one point, I even developed a cloud-based service to store journals).

Markdown

QMarkdownTextEdit provides the Markdown syntax coloring. We slightly adjusted the QWidget to add some smart features like image insertion by drag and drop and autodetection of URL or URI for smart Markdown tags completion. Entire Markdown documents can be inserted using drag and drop.

The rendering is performed using web technology and Marked.js. The only modification was to enable the rendering of LaTeX and Qalculate! results.

Figure.1 - Copy any image from URL
Figure.2 - Drag and drop capabilities
Figure.3 - Smart URL and URI

Calculations

Qalculate! provides a lot of functionalities to perform calculations and conversions. We integrated the tool inside OpenJournal, and the text is natively parsed, computation is done using QCalculate!, and the result is rendered. Combined with LaTeX rendering, it can be a powerful tool to take notes when maths are needed.

Figure.4 - Units conversion
Figure.6 - Example of a computation rendered using LaTeX

Exportation

The entire journal can be exported in PDF for archiving, and individual entries can be saved as PDF or Markdown. In fact, OpenJournal can be used as a standalone Markdown editor with this feature (this blog post was written using OpenJournal).

Figure.5 - OpenJournal as a standalone editor

Note-taking

Now that we have the tool, let’s talk about note-taking. In my case, OpenJournal serves several purposes. The first is that of a planner. With each entry associated with the calendar, I can write meetings and set alarms at different times to ensure I get everything. I can also write deadlines and daily tasks to perform.

The secondary usage is as a journal where I note anything I need later. For example, interrupted in a coding task, I will record my train of thought to resume the job more quickly. I also write bugs and interrogations that I encounter during my coding task (that I can not investigate at the time due to evident pay-job reasons) so I can investigate them more appropriately later. Another job is to record any data analysis I perform, thanks to images and Markdown documents smart integration.

Conclusion

We built a very highly specific tool to meet our particular needs, but several people can benefit from it:

  • For writers: as detailed in Description & Setting by Ron Rozelle, keeping a writer’s journal is an excellent way to improve writing abilities. Writers can record plots, outlines, observations, descriptions, details, dialog lines, etc…
  • For anyone: keeping a daily diary can help you achieve several goals. It can help you organize your thoughts, records daily success, and set your next goals to keep the insensitive high. Writing down feelings can help you self-reflect and relieve stress, keeping a trace of situations and emotions.
  • For professionals: writing down tasks to achieve and expected job duration can help you organize your day. Setting alarms can help to manage available time and not forget any meeting.

OpenJournal is open-source, and precompiled binaries are available for Linux, Windows, and Mac at https://github.com/bgallois/OpenJournal/releases/tag/v1.3.2 with complete documentation at https://openjournal.readthedocs.io/en/latest/.