Pomodoro Scripts is a Pomodoro-style work management app, with additional features not usually found in Pomodoro applications. The app helps the user break down work into consecutive work and break periods. Work periods or pomodoros (called sprints in this app) should be focused and continuous, without unnecessary breaks. They should be followed by breaks which should involve some other activity.
Scripts
Scripts describe a sequence of sprints and breaks, that is the activities of the script. Scripts allow an unprecedented level of flexibility in describing Pomodoro tasks.
Activities
Activities can have a number of attributes: length (in minutes), step limits and heart rate limits.
Length can be an exact length or it can be flexible by having a maximum or minimum length. Step limits can be maximum or minimum steps and heart rate limits can be maximum or minimum heart rate.
For example, you might think that you probably finish an activity earlier than, say, 25 minutes. In this case you want a maximum time length of 25 minutes. In another case you might assume that you’ll will need at least 20 minutes for an activity, and possibly more – so you set a minimum time length of 20 minutes. In a third case you might want to set an exact time length of 30 minutes.
You can restrict yourself from walking during a sprint when the activity is, for example, studying. Thus you might want to set an upper limit for the number of steps during a sprint like that. In contrast, you probably don’t want to have such a restriction when the sprint activity is cleaning. Also, if you want to have a short walk during a break, you can set a lower limit for the number of steps during that activity.
Similarly, you probably want to keep a calm, focused mindset when the sprint is some intense intellectual activity, e.g. exam preparation. Such a mindset requires, in general, a lower heart rate, and thus you can set an upper heart rate limit for such an activity (which you can achieve, for example, by controlling your breathing). In contrast, you might want to have an increased heart rate during a break with a short, brisk walk as the activity. In that case you can set a lower heart rate limit.
Note that the step limits refer to the number of steps per minute, and the heartrate limits refer to the average heartrate per minute.
The same activity can be a sprint in one script and a break in another script. For example, Reading French can be a break in a script focusing on learning Mathematics, or in can be a sprint in a script preparing for a French language exam.
Currently 16 Activities and 8 Scripts can be defined in the Settings of the app.
Defining Activities
Activities can have, as the first item, a name, followed by a colon, for example Coding: . If an Activity is defined without a name, then it is automatically given the default name ANY, meaning ‘any activity’. A name can contain letters of the English alphabet (upper- and lower case), numbers between 0 and 9 and the characters ‘-‘ and ‘/’. The length of a name cannot be more than 10 characters. Spaces inside a name are not allowed.
This is an example of an Activity definition:
l=20
Note that the only thing specified for this Activity is its exact length, 20 minutes. The Activity has no name, thus it receives the default name ANY (‘any activity’). Also, no step or heartrate limits are set.
In contrast, the following Activity definition contains a name, together with specifications of step and heartrate limits:
Garmin: l=25, stp < 10, hr < 65
This defines an activity called Garmin with a length of 25 minutes – meaning, in this example, Garmin watch programming for 25 minutes. It also declares that the user – who would sit during the whole activity – should make less than 10 steps per minute, and that his average heartrate in each minute should be less than 65. In other words, the user defines upper limits for both attributes.
If the user is not interested in step and/or heartrate limits, he can leave out either (or both), like this:
Android: l=20
As an other example, consider Walk, which could be, for example, an activity during a break. Here you would want to specify lower limits for both steps and heartrate, for example:
Walk: l=5, stp > 60, hr > 75
That is, length should be 5 minutes, steps per minute should be more than 60, and average heartrate per minute should be more than 75.
Flexible Activity length
If you are not quite sure how long an Activity should last you can give it an upper or lower time limit. The following Activity – “learning German” – was given an upper length limit of 20 minutes.
German: l < 20
The Activity will proceed for maximally 20 minutes. During this time the app can periodically ask the user if he wants to stop the Activity. The user can specify how often the app should ask (or if it should ask at all). If the user does stop the Activity after the app asked him, it will continue with the next break (or sprint). Otherwise, the Activity will be stopped at 20 minutes and continue with the next break / sprint.
The following example shows how to specify a lower length limit:
Cleaning: l > 35
Here the Activity Cleaning will last at least for 35 minutes. After this, the app will periodically ask the user whether he wants to stop the Activity. Again, the user can specify how often the app should ask (or if it should ask at all). If the user does stop the Activity after the app asked him, it will continue with the next break (or sprint). Otherwise, the Activity will continue and will ask again after a while.
It is also possible not to specify a length at all – not even an upper or lower limit – for example like this:
French: stp < 15
Here only the number of steps per minute is specified (as less than 15). The Activity will continue indefinitely, app periodically asking whether to stop the Activity. The user can also pro-actively stop the Activity at any time, using the main menu (see the description of the User Interface).
Activities with only the name defined are possible, too. Just as in the case before, the Activity will have no length specified. In addition, it has no steps or heartrate attributes either. The user can add attributes to such an Activity inside the Scripts which use the Activity (see below under Modifying Activities inside Scripts). Note that a colon must follow the Activity name, even if there are no further attributes are defined, like this:
French:
In fact, a totally empty Activity, with no name, no length, and no steps or heartrate attributes is also possible. Such an activity has the default name ANY and it runs until the user stops it. The user can add attributes to such an Activity inside the Scripts which use the Activity.
Approximate Activity Length
This is a special case of Flexible Activity Length. The Length is not exact, it has a range. The user can define an approximate length for an activity like this:
Walk: l~5
The ‘Range for Approximate Length‘ can be defined using two properties in Settings:
‘Approximate Length’ can be smaller by this value (minutes)
‘Approximate Length’ can be greater by this value (minutes)
These basically define the lower and upper borders of the range of values around the ‘approximate length’.
Given the above example, where the ‘approximate length’ is set to 5 for the Activity Walk, and if the lower border is set to 3 and the upper border to 2, then the range starts at 5 – 3 = 2 minutes and ends at 5 + 2 = 7 minutes. Thus, the time range is between 2 and 7 minutes.
The user can receive dialog alerts during this time range: the user is asked whether he wants to stop the Activity. If he cancels, the Activity continues. If he confirms, the Activity stops immediately and the script continues with the next Activity. If the user hasn’t canceled until the end of the time range (7 minutes in the example above), then the Activity stops and the script continues with the next Activity.
The frequency of alerts during the ‘approximate range’ can be defined inside the ‘Alerts’ menu. ‘No alerts’ (0 frequency) can be configured there as well.
Activity numbers
Each Activity has a number. The app’s Settings, where you can define the Activities, show the number for each of them. Within a Script the user can refer to Activities by their name or their number.
In the following examples, we assume that the Activity Garmin has the number 1, Android the number 2 and Walk the number 3.
Furthermore, we assume three additional no-name Activities with numbers 4, 5 and 6, which look like this:
l=25
l=5
l=20
Defining Scripts
Scripts must have a name. The limitations for Script names are the same as those for Activity names. The following is an example of a simple Script, consisting of three Activities, two of which are ‘Sprints’ and one is a ‘Break’.
Coding: s.Garmin, b.Walk, s.Android
In ‘s.Garmin‘, the letter ‘s’ refers to ‘Sprint’. In ‘b.Walk‘, the ‘b’ refers to ‘Break’. Thus, we have a Sprint followed by a Break, which is followed by another Sprint.
The script can be shortened if the user uses the numbers of the Activities instead of their names:
Coding: s.1, b.3, s.2
As described under Activity numbers above, in our example the number 1 refers to Garmin, number 2 to Android and number 3 to Walk.
Thus, the example describes a script called Coding (programming), which specifies, as the initial sprint Activity, Garmin coding lasting 25 minutes, followed by a break with the Activity Walk for 5 minutes. This is followed by another sprint with Android coding for 20 minutes as its Activity.
Loops
What if we would like to repeat the sequence specified it the Coding script? This is possible in the following way:
Coding: 3(s.Garmin, b.Walk, s.Android)
The above means that the sequence s.Garmin, b.Walk, s.Android should be repeated three times.
Sequences like the above can contain sub-sequences. For example, the following is the ‘classical‘ Pomodoro sequence.
It uses the Script notation of Pomodoro Scripts and the Activity numbers described above under the heading Activity numbers:
Classic: 4(2(s.4,b.5),s.4,b.6)
Note that the original Pomodoro method does not specify any content: Pomodoros and breaks can be filled with any activities the method’s user chooses. This is also what the Script above does: the Activities with the numbers 4, 5 and 6 don’t have a user-specified name – their default name is ANY.
The Classic Script describes a sprint with a length of 25 minutes, followed by a break with a length of 5 minutes. These are repeated twice, then followed by a sprint of 25 minutes, and finally by a ‘long’ break of 20 minutes. This whole sequence – three sprints and three breaks (the third of which is a ‘long’ break) – is repeated four times.
(The Script ends with a break, which might not be what some people would want. But it is easy to change the Script in a way that it ends with an additional sprint.)
Modifying Activities inside Scripts
Note that in the Script examples above we simply used the Activities as we have previously defined them in the Activities section of the app’s Settings. But what if we would like to re-use the same Activity in several different Scripts, maybe with slight modifications?
For example, one script would use the Walk Activity (see above) with its default length (5 minutes), another Script would use it with a length of 10 minutes, and a third Script would use the same Activity with a length of 15 minutes.
This is how this can be achieved (the ‘…’ means that the Scripts would contain more Activities):
Script1: s.3, ...
Script2: s.3[l=10], ...
Script3: s.3[l=15], ...
Flexible and approximate Activities can be modified as well:
Script4: ... b.Walk[l>5], ...
Script5: ... b.Walk[l~5], ...
If we want to make modifications to several attributes, we need to separate them by commas, like:
Script6: s.3[l=15, stp>10], ...
Thus, the Classic script above can be re-written so that it uses only two Activities, instead of three, like this:
Classic: 4(2(s.4,b.5),s.4,b.5[l=20])
Note: modifications of an Activity inside a Script as described above override whatever original values were specified for the same parameters in the Activity’s original definition. However, Activity names cannot be overridden.