GTD: Fight against Procrastination

Posted by Jingyi on March 16, 2021

Why Omnifocus?

Graduate student life is not easy. Many courses, projects, school-related or -nonrelated stuff need to plan and organize. Some of them have clear goals and exact due dates, but some are not.

I tried to use a calendar-based To-Do app to plan my day in the past year. It worked well, in the sense of reminding me doing somethings, but not effeciently as I expected, because of the following reasons:

  • too much sub-tasks: even preparation of a presentation can be splitted into, at least, gathering information, writing outline, formatting styles, putting figures, writing scratch, rehearsal and etc…
  • too much deadlines: If I put everything into a calendar-based To-Do app, I got very upset because of tooooo many daily dues and reminders.
  • Lack of systemaic view: it appears to be poorly organized even if I use the List function in To-Do apps…

I put my own opinions toward the GTD methods as in the table:

App Calendar Sorted3 Omnifocus
Scenario Preplanned classes, meetings, seminars daily tasks (exercies), personal reminders Research projects, TAing lecture, Academic conferences
Reminder No! Merge into Sorted app Yes No
Level Events with determined time and duration Sudden idea, reminders Project tasks and the split up

Due

I set due only for project with a clear due, i.e., class assignments, meeting preprations. I usde to set due for most actions, like something I think I can complete today, but this way is not working very well to myself right now.

Thankfully the new Omnifocus supports tag functions. It allows me to create my schedule system based on tags, not due, which will be presented in the next part of this blog.

Tags

will be updated soon

Perpectives

will be updated soon

Mail drop

will be updated soon

My Omnifocus Automation Scripts

Here are some useful Omnifocus automation scripts. Some of them are written by myself and some are downloaded from the Internet. I am trying to trace back to the sources of the scripts and if I did not put the correct authors and you know who is contributing to the specific script, please let me know!

  • To better find the script in the automation script list, I add emoji to the scripts’ label.

🚩 Complete & Wait

This Complete & Wait script is extremely helpful when you are cooprating with others. It, together with a Perspective including the wait tag, could bring you an overview of how many tasks are pending to other’s reply. Applicable scenario:

  • After sending emails to others
  • After assigning works to others
  • After processing a delivery return, or initaing a delivery to someone

If you want to custimize this script, please change **Line 20 **: dupTasks[0].addTag( tagNamed("wait")) , with tagNamed("Your Waiting Tag").

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/*{
	"author": "Walker",
	"targets": ["omnifocus"],
	"type": "action",
	"identifier": "com.jappker.omnifocus.complete-and-await-reply",
	"version": "1.0",
	"description": "Mark the currently selected task as complete and add a new task to await the reply.",
	"label": "🚩Complete & Wait",
	"mediumLabel": "Complete & Wait",
	"paletteLabel": "Complete & Wait",
}*/
(() => {
	let action = new PlugIn.Action(function(selection) {
		let duplicatedTasks = new Array()
		selection.tasks.forEach(function(task){
			insertionLocation = task.parent
			if(insertionLocation === null){insertionLocation = inbox.ending}
			dupTasks = duplicateTasks([task], insertionLocation)
			dupTasks[0].name = "Waiting for: " + task.name;
			dupTasks[0].addTag( tagNamed("wait"));
			duplicatedTasks.push(dupTasks[0].id.primaryKey);
			task.markComplete();

		});
		idStr = duplicatedTasks.join(",")
		URL.fromString("omnifocus:///task/" + idStr).open()
		
    });

    
	action.validate = function(selection){
		return (selection.tasks.length >= 1)
	};
        
	return action;
})();

🔢 Numbering tasks

This script is useful when you want to put some actions in sequences aside from the ‘A-Z’ order or creation time order. Applicable scenario:

  • Design presentations (numbers = ppt pages)
  • Review exams
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/*{
    "author": "Author Name",
    "targets": ["omnifocus"],
    "type": "action",
    "identifier": "com.mycompany.numbering tasks",
    "version": "0.1",
    "description": "A plug-in that...",
    "label": "🔢Numbering tasks",
    "mediumLabel": "numbering tasks",
    "paletteLabel": "numbering tasks",
}*/
(() => {
    var action = new PlugIn.Action(function(selection) {
        i = 0; 

	selection.tasks.forEach(function(task){
		i = i + 1;
		name =  task.name;
		new_name = i + " - " + name;
//		console.log("name:", new_name);
		task.name = new_name;

	});
    });

    return action;
})();

📩 Task from email

This script requires that you use Mail Drop function frequenctly. Applicable scenario:

  • Forward seminars, meetings …
  • Forward tasks assigned by others
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/*{
    "author": "Author Name",
    "targets": ["omnifocus"],
    "type": "action",
    "identifier": "com.mycompany.Task from email",
    "version": "0.1",
    "description": "A plug-in that...",
    "label": "📩Task from email",
    "mediumLabel": "Task from email",
    "paletteLabel": "Task from email",
}*/
(() => {
    var action = new PlugIn.Action(function(selection) {
        // Add code to run when the action is invoked
        // console.log("Invoked with selection", selection);
	selection.tasks.forEach(function(task){
		taskname = task.name;
		if (taskname.includes('Fwd:')){
			// console.log(task.name);
			newname = taskname.replace('Fwd: ', '');
			// console.log(newname);
			task.name = newname;
			task.addTag( tagNamed("email"));
			
		};
	});
    });
    return action;
})();

🔗 Open Note URL

You cannot imagine how helpful it is during the COVID, especially combining the Mail Drop function and the 📩Task from email script to deal with emails containing zoom links!!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/*{
	"type": "action",
	"targets": ["omnifocus"],
	"author": "Otto Automator",
	"identifier": "com.omni-automation.call-note-url",
	"version": "1.5",
	"description": "This action will open the URL string that is the value of the note of the selected action.",
	"label": "🔗Open Note URL",
	"shortLabel": "Open Note URL"
}*/
(() => {
	var action = new PlugIn.Action(function(selection, sender){
		
		var note = (selection.projects.length === 1 ? selection.projects[0].task.note : selection.tasks[0].note);
		
		if (note && note.includes("://")) {
			var urlStr = note.match(/[^<\s][^\s]+\/\/[^\s>]+/)[0]
			var url = URL.fromString(urlStr)
			if(url){
				url.open()
			} else {
				console.error("ERROR: \"" + urlStr + "\" is not a valid URL.")
			}
		}
		
	});

	action.validate = function(selection, sender){
		// selection options: tasks, projects, folders, tags
		return (selection.projects.length === 1 || selection.tasks.length === 1)
	};
	
	return action;
})();

🗞 Weekly report

This script is available here: https://github.com/lynnmatrix/omnifocus-weekly-report. It helps generate a Markdown format report, containing the actions you completed during the past week, and the actions you are expecting to finish in the future week.

Here is a example report

The direct output shown in the mailbox:

#### Seminars & Meetings 
##### Group Meeting
- [x] Rehearse @ Mon prepare -- @this-week @Zoom
- [x] Rehearse @ Wed prepare -- @this-week @Zoom
- [x] Rehearse again, time @Thursday @Zoom @today
##### --Department-- group meeting
- [x] --Department-- group meeting (Weds., March 10)
@today
  - [x] One-slide research update March-10 @today
- [x] --Department-- Record Reading tomorrow, 3/12, 2:30pm @email
#### --Example Class--
- [x] Mid-term exam (take-home exam, due Friday) @today
  - [ ] Finish the mid-term exam questions @today => 3/12/2021, 5:00:00 PM
    - [x] Open a document to sort the questions properly @today
    - [x] --Example Class-- Midterm question 1 @today
    - [x] --Example Class-- Midterm question 2 @today
    - [x] --Example Class-- Midterm question 3 @today
  - [x] Review --Example Class-- midterm content - Gather all the equations and concepts in the ppts @today @to-write
    - [x] 1 - Overview @today @to-write
    - [x] 2 - Steady heat transfer @today @to-write
    - [x] 3 - Heat diffusion @today @to-write
    - [x] 4 - Subsidence and dike cooling @today @to-write
    - [x] 5 - Stress pressure and isostasy @today @to-write
    - [x] 6 - Stress, pressure and elasticity @today @to-write
    - [x] 7 - Strain, flexure introduction @today @to-write
    - [x] 8 - Lithospheric flexure @today @to-write
    - [x] 9 - Gravity plate flexure @today @to-write
    - [x] 10 - Yielding and plate flexure @today @to-write
    - [x] 11 - Slow viscous channel flow @today @to-write
    - [x] 12 - Time dependent channel flow @today @to-write
    - [x] 13 - 2D flow, glacial rebound (GIA) @today @to-write
    - [x] 14 - Folding, Rayleigh-Taylor instability @today @to-write
- [x] Homework 6 @this-week @to-write
  - [x] Review and see if hw 6 is correct @this-week @to-write
  - [x] Submit hw 6 to Roger @this-week @to-write
  - [x] HW6 Problem 1 @this-week @to-write
  - [x] HW6 Problem 2 @this-week @to-write
  - [x] HW6 Problem 3 @this-week @to-write

Put this into any Markdown Editor and a clear report of what you’ve done will be displayed

Example-report Seminars & Meetings

Example-report Group Meeting
  • Rehearse @ Mon prepare – @this-week @Zoom
  • Rehearse @ Wed prepare – @this-week @Zoom
  • Rehearse again, time @Thursday @Zoom @today
    Example-report –Department– group meeting
  • –Department– group meeting (Weds., March 10) @today
    • One-slide research update March-10 @today
  • –Department– Record Reading tomorrow, 3/12, 2:30pm @email

    Example-report –Example Class–

  • Mid-term exam (take-home exam, due Friday) @today
    • Finish the mid-term exam questions @today => 3/12/2021, 5:00:00 PM
      • Open a document to sort the questions properly @today
      • –Example Class– Midterm question 1 @today
      • –Example Class– Midterm question 2 @today
      • –Example Class– Midterm question 3 @today
    • Review –Example Class– midterm content - Gather all the equations and concepts in the ppts @today @to-write
      • 1 - Overview @today @to-write
      • 2 - Steady heat transfer @today @to-write
      • 3 - Heat diffusion @today @to-write
      • 4 - Subsidence and dike cooling @today @to-write
      • 5 - Stress pressure and isostasy @today @to-write
      • 6 - Stress, pressure and elasticity @today @to-write
      • 7 - Strain, flexure introduction @today @to-write
      • 8 - Lithospheric flexure @today @to-write
      • 9 - Gravity plate flexure @today @to-write
      • 10 - Yielding and plate flexure @today @to-write
      • 11 - Slow viscous channel flow @today @to-write
      • 12 - Time dependent channel flow @today @to-write
      • 13 - 2D flow, glacial rebound (GIA) @today @to-write
      • 14 - Folding, Rayleigh-Taylor instability @today @to-write
  • Homework 6 @this-week @to-write
    • Review and see if hw 6 is correct @this-week @to-write
    • Submit hw 6 to — @this-week @to-write
    • HW6 Problem 1 @this-week @to-write
    • HW6 Problem 2 @this-week @to-write
    • HW6 Problem 3 @this-week @to-write