番茄工作法是简单易行的时间管理方法,是由弗朗西斯科·西里洛于1992年创立的一种相对于GTD更微观的时间管理方法。
使用番茄工作法,选择一个待完成的任务,将番茄时间设为25分钟,专注工作,中途不允许做任何与该任务无关的事,直到番茄时钟响起,然后在纸上画一个X短暂休息一下(5分钟就行),每4个番茄时段多休息一会儿。
摘自百度百科
番茄工作法的核心是专注工作25分钟,然后短暂休息。如果中途被打扰,本次番茄时段作废。
有时候辅助执行番茄工作法的软件也叫番茄时钟,或者番茄计时器。由于我们ICer一般从Windows远程登录到Linux服务器工作,我们可以在Linux服务器上实现一个简易的番茄计时器,我把它叫做“Work Timer”。
先来整理一下我们的需求:
以25分钟为单位计时
25分钟结束后,提醒休息
休息完后,自动进入下一个25分钟工作时间
需要提高专注力
这样做的好处是:1. 提高工作效率;2. 强制休息,保持头脑清醒。
一个简易的方案
调用0.5s定时器,每0.5s读取一次操作系统时间,实现一个时钟。
番茄计时开始时,记录一次系统时间time_start。每次0.5s中断服务函数里,对比系统时间与开始时间的差,如果时间差达到25分钟,就计时结束。
番茄计时结束时,弹出消息框提示该休息了。
休息片刻回来,关闭刚才的提示框,下一个番茄计时则自动开始。
辅助功能:
1. 系统时间调整
2. 番茄工作时间统计
关于如何提高专注力:
手机:手机调震动、静音、关闭网络、关机等
Windows:VNC全屏、关闭Outlook邮件提醒等
其它:戴耳机、听音乐等
一般的番茄计时器都有一个醒目倒计时画面,我觉得这个不太好,很可能会一会儿看一下还剩几分钟,这样反而不利于专注。我这个解决方案里,没有倒计时显示,仅有到时提醒。
实现细节
运行图形界面如下:
非常简洁,就是一个系统时钟。没有菜单栏、状态栏。可以显示在其它软件之上,不担心被emacs或者verdi挡住。
所有的操作都通过右键菜单:Quit(退出程序),Pause/Resume Timer(中断番茄工作计时),+/- 1分钟5分钟(调整系统时钟偏差。一般我们ICer没有权限修改系统时间,但可以自己做一个时钟,想调快调慢都行)。
其中,Pause Timer是在中途遇到其它不得不打断的事情时暂时关闭番茄计时器的。Resume Timer是忙完其它琐碎的事后,重新开始工作时恢复番茄计时器的。
番茄时间计时结束提醒如下。提醒休息的同时,统计一下今天已经执行了几个番茄工作时间。休息片刻回来再点“OK”,下一个番茄工作时间又开始了。
源码分析
用GTK实现图形界面
主要用到了gtk_window和gtk_button。在init和create组件后,设置各种属性,如无边框、大小等。再g_signal_connect设置组件与处理函数的对应关系。最后,gtk_widget_show显示出图形界面,并进入检测鼠标和键盘等事件的Loop(gtk_main)。
实现0.5秒的定时器
先在主函数里,调用g_timeout_add增加一个定时器,设置时间为500ms,设置处理函数timer_handler。
在处理函数里,读取系统时间cur_time,用time_adj进行时间调节,再转成tm结构体。tm结构体存储着年月日时分秒,还有星期。
再格式化成字符串,“2018-12-02\n08:50 Sun”或者“2018-12-02\n08 50 Sun”,小时和分钟的冒号可以半秒显示、半秒不显示,看起来就是一个在走的时钟了。
实现25分钟的计时器
在定时处理函数里,当前时间 - 开始时间 >= 25分钟,则重装开始时间,并弹出消息框提醒番茄工作时间结束,注意休息。
实现消息框
封装一个gtk_message_dialog。设置了两个属性,“居中”和“保持在其它程序之上”,这样的提醒最为醒目,不管你在做什么,仿真还是调试,消息框总能跑到你眼前。
实现右键菜单
用event-button == 3判断是右键,动态创建gtk_menu、gtk_menu_item,设置菜单的回调函数,最后显示菜单gtk_menu_popup。
可扩展性
基于本番茄工作计时器的框架,你可以定制自己的工作方式,也可以实现自己的定时任务提醒,定时自动执行任务,如自动项目备份等。
获取源码
https://github.com/chenfengrugao/gtimer
欢迎关注ExASIC
分享数字集成电路设计中的经验和方法
分享让工作更轻松
领取专属 10元无门槛券
私享最新 技术干货