使用Logseq构建GTD系统
2021-05-08: 1.0版本初步完成,待完善已完成任务回顾
2021-05-10: 1.1版本完成,修改不重要不紧急为将来清单,且新增每周回顾
前言
最近在阅读《小强升职记》,感觉里面讲到的时间管理工具和方法十分有用,自己之前虽然也了解一些工具,例如四象限原则、两分钟方法等,但看完这本书之后感觉之前的理解还是太肤浅了。是时候升级一下自己的时间管理系统了。
在此之前我的工具大致包括: 稍后读软件、GTD工具(滴答清单)、写作工具(一般是VSCode+Hexo)。最近半年沉迷于使用双链笔记软件,目前在用的是 Logseq,后面专门展开介绍一下。目前在尝试将GTD工具、笔记都整合到 Logseq 里面,主要是受了这篇文章的启发 OKR + GTD + Note => Logseq,下面就详细介绍一下我的实践过程。
前置知识
Datalog
首先,需要简单学习一下Datalog语法。Logseq是基于Clojure开发的,它的底层可以简单地理解为是类似于数据库的结构,因此可以天然的支持各种查询,这也是我们能够利用它来实现 GTD 管理的前提。因此这里如果需要掌握如何使用 Logseq 来进行查询的话,最好先学习一下如何使用 Datalog。可以参考 官方的查询教程 以及这篇 Learn Datalog Today,粗略扫一遍,能够看懂大概意思就可以了。
CSS
其次,Logseq本身是列表大纲形式,无法直接支持四象限这种样式,因此需要一些 CSS功底,这里我是直接参考了 OKR + GTD + Note => Logseq 里面的样式,原始版本在 [css+template] eisenhower matrix,可以简单看下。
使用步骤
块属性
《小强升职记》里面提到日常待办事项是分为项目、任务、行动三种的,只有行动才是可以立马去执行的,项目和任务都需要进行分解,拆成行动。
结合Logseq,我目前考虑使用属性来解决,也可以考虑使用标签,不过我认为会对内容有一定的污染,各有利弊吧。
针对一个新的行动或者任务,添加属性type字段,然后根据具体的类型添加行动、任务、项目字段。
样例:
四象限查询条件
注意:所有的待办都必须要有明确的优先级和截止日期,这么做有几个原因:
1. 要求自己对每个待办都设置明确的时间点,避免添加到收集箱中一直不处理
2. 添加了优先级之后才好进行四象限统计
3. 目前还没有找到Logseq的query条件中如何同时查找DDL在限定时间内以及无DDL限制的任务,只能查找其中一种case,这个后续解决
实际使用过程中,可以把一下的查询条件汇总到一个模板中,
## #.v-eisenhower-matrix (用于CSS选择器,最好不要改)
:PROPERTIES:
:template: 四象限
:END:
#### [[重要且紧急]]
#####
#+BEGIN_QUERY
...
#+END_QUERY
#### [[重要不紧急]]
#### [[紧急不重要]]
#### [[不重要不紧急]]
具体查询语句如下:可以根据自己的实际使用需求将属性限制移除或者修改时间限制,代码中均已经添加注释。
2021-05-10 补充: 将设置为Later的事项移动到第四象限,这样就可以定期回顾;同时新增一个每周回顾的query语句,由于目前Logseq还不支持查询当前时间戳,因此用了个笨办法,每次查询的时候手动输入当前时间戳ms进行查询。
[[重要且紧急]] 避免太多进入该象限^
#+BEGIN_QUERY
{:query [:find (pull ?b [*])
:in $ ?end
:where
[?b :block/marker ?marker]
[?b :block/priority "A"] ;; 优先级在A的才认为是重要
[?b :block/properties ?p]
[(get ?p "type") ?t]
[(contains? #{"任务" "行动" "项目"} ?t)] ;; 属性中type字段包含这三种
[(contains? #{"TODO" "DOING" "NOW"} ?marker)] ;; 不包含已完成任务,不包含LATER
(or
[?b :block/scheduled ?d]
[?b :block/deadline ?d])
[(<= ?d ?end)]
]
:inputs [:5d-after] ;; 时间跨度,5天内的算作紧急
}
#+END_QUERY
[[重要不紧急]] 优先完成此象限^
#+BEGIN_QUERY
{ :query [:find (pull ?b [*])
:in $ ?end
:where
[?b :block/marker ?marker]
[?b :block/priority "A"] ;; 优先级在A的才认为是重要
[?b :block/properties ?p]
[(get ?p "type") ?t]
[(contains? #{"任务" "行动" "项目"} ?t)] ;; 属性中type字段包含这三种
[(contains? #{"TODO" "DOING" "NOW"} ?marker)] ;; 不包含已完成任务,不包含LATER
(or
[?b :block/scheduled ?d]
[?b :block/deadline ?d])
[(> ?d ?end)] ;; DDL在5天以上
]
:inputs [:5d-after] ;; 时间跨度,5天内的算作紧急
}
#+END_QUERY
[[紧急不重要]] 尽量委派给其他人^
#+BEGIN_QUERY
{ :query [:find (pull ?b [*])
:in $ ?end
:where
[?b :block/marker ?marker]
[?b :block/properties ?p]
[?b :block/priority ?priority]
[(get ?p "type") ?t]
[(contains? #{"任务" "行动" "项目"} ?t)] ;; 属性中type字段包含这三种
[(contains? #{"TODO" "DOING" "NOW"} ?marker)] ;; 不包含已完成任务,不包含LATER
[(!= "A" ?priority)] ;; 优先级在A的才认为是重要
(or
[?b :block/scheduled ?d]
[?b :block/deadline ?d])
[(<= ?d ?end)]
]
:inputs [:5d-after] ;; 时间跨度,5天内的算作紧急
}
#+END_QUERY
[[待办清单]] 不紧急不重要,定期回顾确认^
#+BEGIN_QUERY
{ :query [:find (pull ?b [*])
:where
[?b :block/marker ?marker]
[(contains? #{"LATER"} ?marker)]
]
}
#+END_QUERY
[[本周已完成]] 近七天统计^
#+BEGIN_QUERY
{ :query [:find (pull ?b [*])
:where
[?b :block/marker ?marker]
[?b :block/properties ?p]
[(get ?p "done") ?finishedTime]
[(- 1620657776000 604800000) ?weekbefore] ;; 由于目前Logseq不支持直接获取当前时间戳,只能使用trick的方式,每次查询前手动输入当前时间戳ms值,算出一周前的时间戳
[(>= ?finishedTime ?weekbefore)] ;; 一周内完成的工作
[(= "DONE" ?marker)]
]
}
#+END_QUERY
CSS优化
这里直接照抄了 OKR + GTD + Note => Logseq, 不过它的CSS中内容较多,我单独提取了四象限相关的部分,放在 四象限CSS 中,查询模板也都放在这里,便于大家使用。
最终效果
目前我的每日笔记大概长这样:
1.1 版本已经解决
可以算是1.0 版本,目前存在的问题包括:
没有地方定期回顾那些没有设置DDL和优先级的任务缺少查看已完成任务和行动的地方(做周报时候很有用)
Logseq是个很棒的工具,期待尽快稳定下来,后面长期使用,作为笔记+GTD一站式平台~
使用Logseq构建GTD系统的更多相关文章
- Linux From Scratch(从零开始构建Linux系统,简称LFS)- Version 7.7(二)
七. 构建临时系统 1. 通用编译指南 a. 确认是否正确设置了 LFS 环境变量 echo $LFS b. 假定你已经正确地设置了宿主系统的符号链接: 1)shell 使用的是 bash. 2)sh ...
- Spring Boot中使用 Spring Security 构建权限系统
Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中配置的Bean,为应用系统提供声明式的安全 ...
- 在TensorFlow中基于lstm构建分词系统笔记
在TensorFlow中基于lstm构建分词系统笔记(一) https://www.jianshu.com/p/ccb805b9f014 前言 我打算基于lstm构建一个分词系统,通过这个例子来学习下 ...
- Linux From Scratch(从零开始构建Linux系统,简称LFS)(二)
七. 构建临时系统 1. 通用编译指南 a. 确认是否正确设置了 LFS 环境变量 echo $LFS b. 假定你已经正确地设置了宿主系统需求和符号链接 c. 对于每个软件包: (1). 确保解压软 ...
- LFS7.10——构建LFS系统
参考:LFS7.10——准备Host系统 LFS7.10——构造临时Linux系统 本文正式开始构建LFS系统,后面所有命令的执行都是在root用户下完成的. 这时开始构建LFS前准备工作 更改$LF ...
- Linux From Scratch(从零开始构建Linux系统,简称LFS)- Version 7.7(一)
一. 准备工作 1. 需要一个Linux宿主系统,例如早先版本的 LFS,Ubuntu/Fedora,SuSE 或者是在你的架构上可以运行的其它发行版 如果想实现Win7与Linux双系统,可参考我的 ...
- Raspberry Pi(树莓派)上从零开始构建Linux系统(简称PiLFS)(一)
一. 准备工作 1. 装有Linux宿主系统的树莓派主板,可参考 Raspberry Pi(树莓派)上安装Raspbian(无路由器,无显示器) 2. 参考网址:Linux From Scratch ...
- 基于Spring、SpringMVC、MyBatis、Druid、Shrio构建web系统
源码下载地址:https://github.com/shuaijunlan/Autumn-Framework 在线Demo:http://autumn.shuaijunlan.cn 项目介绍 Autu ...
- alfs学习笔记-自动化构建lfs系统
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 一名linux爱好者,记录构建Linux From Scratch的过程 经博客园-骏马金龙前辈介绍,开始接触学习lfs,用博客 ...
随机推荐
- WSL2设置局域网网访问
标签: wsl2 局域网 docker WSL2设置内网访问 1.先找到虚拟机的ip 2.设置端口转发(需要管理员权限运行powershell) 3.删除端口转发 4.配置入站规则. 1.先找到 ...
- 编译PHP扩展的方式
编译的两种方式其实很简单,这里记录只是为了以后遇到这种情况时不加思索地运用上,而不是花费一些时间去回忆. C/C++程序编译有两种方式:动态编译.静态编译.PHP 是使用 C/C++程序开发的一门脚本 ...
- 控制器view生命周期
控制器View的生命周期方法:只要是控制器的生命周期方法,都是以view开头. 控制器View加载完成时调用- (void)viewDidLoad { [super viewDidLoad];} 控制 ...
- HTML 代码复用
前言 通常我们所做的一些页面,我们可以从设计图里面看出有一些地方是相同的.例如:头部,底部,侧边栏等等.如果是制作静态页面的同学,对于这些重复的部分只能够通过复制粘贴到新的页面来,如果页面的数量上去了 ...
- undefined index: php中提示Undefined ...
我们经常接收表单POST过来的数据时报Undefined index错误,如下:$act=$_POST['action'];用以上代码总是提示Notice: Undefined index: act ...
- 深度学习:多层感知机和异或问题(Pytorch实现)
感知机模型 假设输入空间\(\mathcal{X}\subseteq \textbf{R}^n\),输出空间是\(\mathcal{Y}=\{-1,+1\}\).输入\(\textbf{x}\in \ ...
- Java数据库连接池--DBCP浅析.
一. 为何要使用数据库连接池假设网站一天有很大的访问量,数据库服务器就需要为每次连接创建一次数据库连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出.拓机.数据库连接是一种关键的有限的昂贵 ...
- NOIP2021T1报数——黄蓝紫黑的神奇梯度
7A3T 点击查看代码 #include<iostream> #include<cstdio> #include<cmath> #include<algori ...
- Spring 初始化流程
开始 在SpringIOC中,前面讲述了如何配置BeanDefinition和如何注册BeanDefinition,但是这些知识容器初始化的一部分,在AbstractApplicationContex ...
- 最新版的Dubbo Admin 3.0 本地启动方式
项目下载 项目地址:https://github.com/apache/dubbo-admin 如下图,使用git地址直接构建或者下载zip包构建源码都可以,我用的是下载的zip包, 项目架构说明 d ...