DailyTick 开发实录 —— 开始
2009 年我读了李笑来老师的《把时间当朋友》,知识了柳比歇夫的时间记录法。当时激动坏了,马上动手实践起来。一开始的时候,是用一个小本子,走到哪儿都带着。完成一件事,就记录一下花费的时间。这样的做法持续了一周多的时间,我发现每天浪费在 Google Reader 上的时间大幅度减少了。那个时候,我使用的是一部 Nokia S40 手机,可以上网。于事,又在淘宝上买了一个 PHP 空间,用 PHP(好像是Yii2)做了一个在线版的。一直用到过年(这书是夏天发布的)。然后就悲剧了。卖我 PHP 空间那个店跑路了,我的大概一两个月的数据就那样没有了。当时非常的受打击。一下就没有心情做记录了。
大概又过了一年,我有了一台 S60 的手机。然后尝试过用各种方法再写一个时间记录的工具。但都感觉很难用,还不如手记的方便。后来因为学业之类的问题,这个工具也就没有继续做了。
2014年左右,我的手机已经换成了 Android,那时候设计了一个叫 ToDo-Doing-Done 的时间记录工具,和现在的 aTimeLogger 有一点像。只是我多了一个 ToDo 的功能。这个东西也是各种方案去尝试,体验都差得我自己都不想用。
到了2016年,我重新开始尝试做时间记录。一开始尝试使用 WPS 的手机版来记录,也用过 Google Docs,还有番茄土豆,最后还是使用了 aTimeLogger。在记录的过程中,我反复思考和感觉自己在时间记录上有什么样的需求。aTimeLogger 能不能完全满足我的需要。最后,我想到了现在这个项目:DailyTick。
aTimeLogger 做为时间管理的工具,已经是非常好用的了。其实还有一个也不错的,而且 UI 做的比 aTimeLogger 好看多了的 Mr.Timer。但是,仔细看李笑来老师的文章,你会发现,他反复强调的一点是:时间是不能管理的,能管理的只是我们自己的注意力。我反复思考、对比他所谓“时间不能管理”这个说法和主流的时间管理概念有什么不同。我一开始的感觉,这不都是一样的事情吗?不就是规定自己一天中的哪段时间应该干什么。然后严格执行这个计划。比如:看书1小时,写作1小时,给某某打电话30分钟。或者就算用番茄工作法,也不过是把这个时间变成一个番茄时间而已啊?!
然后我又仔细回忆柳比歇夫的故事,慢慢想通了一点(也可能是我想错了):在柳比歇夫的故事里,并没有提到他计划干什么事情需要多长时间。他只是在记录自己做每件事情的时间。然后对这些时间进行统计。也就是说,我们要把自己的生活在时间这个维度上数字化。我应该是在2016年5月到6月这个时间段里想通这个问题,并开始设计 DailyTick 的。但一真没有时间动手开发。在那之后,我尽量用 aTimeLogger 模仿 DailyTick 的思想去记录每天的行程。然后在周末的时候整理、统计,对比本周和前一周的各项记录项目和时间使用量。看看哪个多花了时间,哪个少花了时间,哪个可以削减,哪个应该增加。如此一直从9月搞到12月。
我发现 aTimeLogger 最大的问题就是统计不方便,记录也太麻烦。先说记录麻烦:每当要开始一个任务的时候,总有一个难题,就是这个事情是什么分类的事。如果记得太粗,你能看到的每天的时间花费都是非常整块和时间。而这段时间里的效率没法分辨。如果记得太细。那就需要在干这个事情的时候,去找到对应的类别。而有的时候,一件临时插进来的事情,很可能找不到分类。如果这个时候你要新创建一个分类——哈哈,你懂的。
再来说一下统计的功能。aTimeLogger 是把一天里(或者一周、一年)按照分类来加总,形成一个饼图。就如刚才说的,如果你要统计得细,那就需要创建很多的分类。虽然 aTimeLogger 可能考虑到这个问题,提供了一个分组的功能。但分组的选择有时候也是一个灾难。比如你创建了一个“工作”分组,里面有“打电话”、“发邮件”和“面谈”。那么不常用的工作可能会被你折叠到“工作”这个分组的内部。一段时间不用,甚至会忘记一个类别在哪个分组里(如果分组和类别太多和话),然后还要一个分组一个分组的找(好像又说回到上一个话题了)。总之就是统计功能太单一。我的做法只能是在备注里写上工作或者学习的内容,然后周末再自己一条一条的加起来。由于这种方式很麻烦,一段时间之后,我就放弃了,只记录“工作”、“阅读”、“学习”这样的整块的时间,不再统计细部的时间了。
那么,DailyTick 的设计哲学是什么呢?我举了个比较形象的例子(其实是我不想画图了^_^):你有一个圆形的钟表。表转一圈是24小时。早晨8点起来,你在表盘上画了一个记号。然后去洗漱。洗漱完——可能是花了10分钟——你回来,又在表上做一个记号。诸如此类。当然,你还需要一个本子,用来记录每个记号代表的事件。同时,还可以给这个事件做一个标签。于是,这个时间记录就丰富起来。
比如:8点30分从家出门,步行到公交站,记录了一下(事件:走路到公交站,标签:走路、通勤);坐上公交,到了公司,再记录一下(事件:坐公交到公司,标签:公交、通勤)。看到了吗?你不但可以记录做了什么事(就像 aTimeLogger 的分类一样),还可以给每个事件增加新的统计纬度。比如,如果你经常出差,还可以在标签里记录事件发生的地点,这样你就可以知道自己一个月在哪个城市待的时间最长。
也许你会说:我要上公交了,哪儿有时间做记录?!所以,这里的记录方式非常简单:你只需要在通知栏里点一下,就相当于刚才在表盘上刻了一个记号,等你到了公司,把把事件和标签补上(感觉像刻舟求剑)。也许你还会说:我记录了一堆,都忘了哪个事情对应的是哪个时间了。那我好像帮不了你了。只能提醒你:要经常做好记录,不要等一天的最后再记录,那样很多事情都记不得了。另外,标签这个事情,其实只要事件记录了,标签什么时候加并不重要。这个可以在一天的最后,边回忆一天的工作,边加上标签。我会把最常用的6个标签和最近使用的6个标签直接显示出来,剩下的就只能自己输入了(可能会有 autocomplete)。
有了这些记录和标签,再做统计就方便多了。当然,如果你统计也不想做,我应该会推出一些增值服务:把一段时间的记录导出成,比如 PDF 文件、Excel 文件。当然既然是增值服务了,这部分是要收费的。
DailyTick 会使用 Xamarin 来开发,客户端的源码是开放的。和另一个项目 CoreCRM 一样,开发的过程也会记录在这个博客里。服务器(也就是所谓的增值服务)是不开源的。当然,在客户端,这部分通信的代码也不开源。可能会留一个接口文件。
DailyTick 的 GitHub 地址:https://github.com/holmescn/DailyTick
DailyTick 开发实录 —— 开始的更多相关文章
- DailyTick 开发实录 —— UI 设计
上次的文章中描述了 DailyTick 的设计理念.经过两周左右的设计和开发,现在 DailyTick 的主要 UI 已经完成了原型的设计和初步的实现.既然是原型,当然看起来就有点粗糙. 主 UI 主 ...
- Google Chrome Native Messaging开发实录(二)Chrome Extension扩展
接上一篇<Google Chrome Native Messaging开发实录(一)背景介绍>的项目背景,话不多说,有关Chrome Extension介绍和文档就不展开了,直接上代码. ...
- 【视频开发】ONVIF、RTSP/RTP、FFMPEG的开发实录
ONVIF.RTSP/RTP.FFMPEG的开发实录 前言 本文从零基础一步步实现ONVIF协议.RTSP/RTP协议获取IPC实时视频流.FFMPEG解码.开发环境为WIN7 32位 + VS201 ...
- 【开发实录】在鸿蒙开发板上使用websocket(移植自librws库)
librws: Tiny, cross platform websocket client C library 相关代码可在下面下载,也可进入librws: 将librws移植到鸿蒙Hi_3861开发 ...
- CoreCRM 开发实录——Travis-CI 实现 .NET Core 程度在 macOS 上的构建和测试 [无水干货]
上一篇文章我提到:为了使用"国货",我把 Linux 上的构建和测试委托给了 DaoCloud,而 Travis-CI 不能放着不用啊.还好,这货支持 macOS 系统.所以就把 ...
- CoreCRM 开发实录——想用国货不容易
昨天(2016年12月29日)发了开始开发的文章.本来晚上准备在 Coding.NET 上添加几个任务开始搞起了.可是真的开始用的时候才发现:Coding.NET 的任务功能只针对私有的任务开放.我想 ...
- CoreCRM 开发实录——开始之新项目的技术选择
2016年11月,接受了一个工作,是对"悟空CRM"进行一些修补.这是一个不错的 CRM,开源,并提供一个 SaaS 的服务.正好微软的 .NET Core 和 ASP.NET C ...
- Jquery EasyUI 开发实录
有好几年没有用过EasyUI了,最近在外包做的一个项目中新增功能时,又用到了,本以为和按照以前那样用就可以了,可当我真正用的时候,发现许多地方不一样了,就连官网的文档都更新了,最突出的就是不知道什么时 ...
- CoreCRM 开发实录 —— 单元测试、测试驱动开发和在线服务
测试不是问题,问题是怎么测试. ## 单元测试 我认为单元测试已经是无可争议的最佳开发实践之一.但是很多人并不同意这个观点.他们的说法无非是:写测试需要花很多时间,需求又经常变动,一但变动,一大片测试 ...
随机推荐
- CSS 3学习——animation动画
以下内容根据官方文档翻译以及自己的理解整理. 1. 介绍 本方案介绍动画(animations).通过动画,开发者可以将CSS属性值的变化指定为一个随时间变化的关键帧(keyframes)的集合.在 ...
- SQL Server on Linux 理由浅析
SQL Server on Linux 理由浅析 今天的爆炸性新闻<SQL Server on Linux>基本上在各大科技媒体上刷屏了 大家看到这个新闻都觉得非常震精,而美股,今天微软开 ...
- ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core
背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...
- hibernate多对一双向关联
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- Matlab 高斯_拉普拉斯滤波器处理医学图像
前言:本程序是我去年实现论文算法时所做.主要功能为标记切割肝脏区域.时间有点久,很多细节已经模糊加上代码做了很多注释,因此在博客中不再详述. NOTE: 程序分几大段功能模块,仔细阅读,对解决医学图像 ...
- 【SSM框架】Spring + Springmvc + Mybatis 基本框架搭建集成教程
本文将讲解SSM框架的基本搭建集成,并有一个简单demo案例 说明:1.本文暂未使用maven集成,jar包需要手动导入. 2.本文为基础教程,大神切勿见笑. 3.如果对您学习有帮助,欢迎各种转载,注 ...
- CRL快速开发框架系列教程十二(MongoDB支持)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- android studio你可能忽视的细节——启动白屏?drawable和mipmap出现的意义?这里都有!!!
android studio用了很久了,也不知道各位小伙伴有没有还在用eclipse的,如果还有,楼主真心推荐转到android studio来吧,毕竟亲儿子,你会知道除了启动速度稍微慢些,你找不到一 ...
- 多线程 异步 beginInvoke EndInvoke 使用
有许多耗时操作时,还要响应用户操作.这时候就需要用其他线程或者异步来搞.本来是改造公司的日志组件.因为多上了个国外大区的业务到来本系统来.这个系统其他地方都好就是日志,动不动就要死给我们看.有时候寻找 ...
- 用angular怎么缓存父页面数据
angular做单页面应用是一个比较好的框架,但是它有一定的入门难度,对于新手来说可能会碰到很多坑,也有许多难题,大部分仔细看文档,找社区是能解决的. 但有些问题也许资料比较少,最近遇到过一个要缓存父 ...