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 开发实录 —— 单元测试、测试驱动开发和在线服务
测试不是问题,问题是怎么测试. ## 单元测试 我认为单元测试已经是无可争议的最佳开发实践之一.但是很多人并不同意这个观点.他们的说法无非是:写测试需要花很多时间,需求又经常变动,一但变动,一大片测试 ...
随机推荐
- 01.SQLServer性能优化之----强大的文件组----分盘存储
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 文章内容皆自己的理解,如有不足之处欢迎指正~谢谢 前天有学弟问逆天:“逆天,有没有一种方 ...
- Spark踩坑记——Spark Streaming+Kafka
[TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...
- 如何用百度MIP快速搭建体验友好的移动页面
在读这篇文章之前,请确定你已经了解MIP定义及加速原理.如果不确定的话,可以到MIP官网了解. 改造前期准备和注意事项: 你可以选择直接将原先的移动站点直接改成MIP站,也可以单独再做一套MIP站点与 ...
- java中文乱码解决之道(一)-----认识字符集
沉寂了许久(大概有三个多月了吧),LZ"按捺不住"开始写博了! java编码中的中文问题是一个老生常谈的问题了,每次遇到中文乱码LZ要么是按照以前的经验修改,要么则是baidu.c ...
- PowerDesigner-VBSrcipt-自动设置主键,外键名等(SQL Server)
在PowerDesigner中的设计SQL Server 数据表时,要求通过vbScript脚本实现下面的功能: 主键:pk_TableName 外键:fk_TableName_ForeignKeyC ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统 (源码购买说明)
系列目录 升级日志 !!!重大版本更新:于2016-12-20日完成了系统的结构重构并合并简化了T4(这是一次重要的更新,不需要修改现有功能的代码),代码总行数比上个版本又少了1/3.更新了代码生成器 ...
- javascript表单的Ajax 提交插件的使用
Ajax 提交插件 form.js 表单的下载地址:官方网站:http://malsup.com/jquery/form/ form.js 插件有两个核心方法:ajaxForm()和ajaxSubmi ...
- 如何定位Oracle数据库被锁阻塞会话的根源
首先再次明确下,数据库因为要同时保证数据的并发性和一致性,所以操作有锁等待是正常的. 只有那些长时间没有提交或回滚的事物,阻塞了其他业务正常操作,才是需要去定位处理的. 1.单实例环境 2.RAC环境 ...
- 【踩坑速记】二次依赖?android studio编译运行各种踩坑解决方案,杜绝弯路,总有你想要的~
这篇博客,只是把自己在开发中经常遇到的打包编译问题以及解决方案给大家稍微分享一下,不求吸睛,但求有用. 1.大家都知道我们常常会遇到dex超出方法数的问题,所以很多人都会采用android.suppo ...
- Autofac - 属性注入
属性注入不同于通过构造函数方式传入参数. 这里是通过注入的方式, 在类创建完毕之后, 资源释放之前, 给属性赋值. 这里, 我重新弄一些类来演示这一篇吧. public class ClassA { ...