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 开发实录 —— 单元测试、测试驱动开发和在线服务
测试不是问题,问题是怎么测试. ## 单元测试 我认为单元测试已经是无可争议的最佳开发实践之一.但是很多人并不同意这个观点.他们的说法无非是:写测试需要花很多时间,需求又经常变动,一但变动,一大片测试 ...
随机推荐
- 数学思想:为何我们把 x²读作x平方
要弄清楚这个问题,我们得先认识一个人.古希腊大数学家 欧多克索斯,其在整个古代仅次于阿基米德,是一位天文学家.医生.几何学家.立法家和地理学家. 为何我们把 x²读作x平方呢? 古希腊时代,越来越多的 ...
- 前端学HTTP之Web主机托管
前面的话 对内容资源的存储.协调以及管理的职责统称为Web主机托管.主机托管是Web服务器的主要功能之一.保存并提供内容,记录对内容的访问以及管理内容都离不开服务器.如果不想自行管理服务器所需的软硬件 ...
- Android和JavaScript相互调用的方法
转载地址:http://www.jb51.net/article/77206.htm 这篇文章主要介绍了Android和JavaScript相互调用的方法,实例分析了Android的WebView执行 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(81)-数据筛选(万能查询)
系列目录 前言 听标题的名字似乎是一个非常牛X复杂的功能,但是实际上它确实是非常复杂的,我们本节将演示如何实现对数据,进行组合查询(数据筛选) 我们都知道Excel中是如何筛选数据的.就像下面一样 他 ...
- WebApi - 路由
这段时间的博客打算和大家一起分享下webapi的使用和心得,主要原因是群里面有朋友说希望能有这方面的文章分享,随便自己也再回顾下:后面将会和大家分不同篇章来分享交流心得,希望各位多多扫码支持和点赞,谢 ...
- [C#] C# 知识回顾 - 序列化
C# 知识回顾 - 序列化 [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902005.html 目录 序列化的含义 通过序列化保存对象数据 众 ...
- PHP获取上个月最后一天的一个容易忽略的问题
正常来说,PHP是有一个很方便的函数可以获取上个月时间的 strtotime (PHP 4, PHP 5, PHP 7) strtotime - 将任何英文文本的日期时间描述解析为 Unix 时间戳 ...
- 【用户交互】APP没有退出前台但改变系统属性如何实时更新UI?监听系统广播,让用户交互更舒心~
前日,一小伙伴问我一个问题,说它解决了半天都没解决这个问题,截图如下: 大概楼主理解如下: 如果在应用中有一个判断wifi的开关和一个当前音量大小的seekbar以及一个获取当前电量多少的按钮,想知道 ...
- [开发笔记]yum错误
yum 错误TypeError: rpmdb open failed 解决办法 是因为RPM数据库出现损坏导致的,它导致所有的软件的升级.安装甚至是删除都会出现问题,终端出现乱码,YUMEX也用不成, ...
- 如何用Java类配置Spring MVC(不通过web.xml和XML方式)
DispatcherServlet是Spring MVC的核心,按照传统方式, 需要把它配置到web.xml中. 我个人比较不喜欢XML配置方式, XML看起来太累, 冗长繁琐. 还好借助于Servl ...