用 Jupyter 和 Python 在你的日常写作背后实现一些自动化。

有些人会遵循传统,制定一年的计划。不过,一年的时间很长,所以我以季节性的主题或轨迹来规划。每个季度,我都会坐下来,看看即将到来的三个月的季节,并决定在这段时间里我将努力做什么。

对于我最新的主题,我决定要每天写一篇日记。我喜欢有明确的承诺,所以我承诺每天写 5 分钟。我也喜欢有可观察的承诺,哪怕只是对我而言,所以我把我的记录放在 Git 里。

我决定在写日记的过程中实现一些自动化,于是我使用了我最喜欢的自动化工具:Jupyter。Jupyter 有一个有趣的功能 ipywidgets,这是一套用于 Jupyter Notebooks、JupyterLab 和 IPython 内核的交互式 HTML 组件。

如果你想跟着本文的代码走,请注意,让你的 JupyterLab 实例支持组件可能有点复杂,请按照这些说明来进行设置。

导入 ipywidgets 模块

首先,你需要导入一堆东西,比如 ipywidgets 和 Twisted。Twisted 模块可以用来创建一个异步时间计数器:

importtwisted.internet.asyncioreactor

twisted.internet.asyncioreactor.install()

fromtwisted.internetimportreactor,task

importipywidgets,datetime,subprocess,functools,os

设置定时条目

用 Twisted 实现时间计数器是利用了 task.LoopingCall。然而,结束循环调用的唯一方法是用一个异常。倒计时时钟总会停止,所以你需要一个自定义的异常来指示“一切正常;计数器结束”:

classDoneError(Exception):

pass

现在你已经写好了异常,你可以写定时器了。第一步是创建一个 ipywidgets.Label 的文本标签组件。循环使用 divmod 计算出分和秒,然后设置标签的文本值:

deftime_out_counter(reactor):

label=ipywidgets.Label("Time left: 5:00")

current_seconds=datetime.timedelta(minutes=5).total_seconds()

defdecrement(count):

nonlocalcurrent_seconds

current_seconds-=count

time_left=datetime.timedelta(seconds=max(current_seconds,0))

minutes,left=divmod(time_left,minute)

seconds=int(left.total_seconds())

label.value=f"Time left: {minutes}:{seconds:02}"

ifcurrent_seconds<0:

raiseDoneError("finished")

minute=datetime.timedelta(minutes=1)

call=task.LoopingCall.withCount(decrement)

call.reactor=reactor

d=call.start(1)

d.addErrback(lambdaf:f.trap(DoneError))

returnd,label

从 Jupyter 组件中保存文本

下一步是写一些东西,将你输入的文字保存到一个文件中,并提交到 Git。另外,由于你要写 5 分钟的日记,你需要一个能给你提供写字区域的组件(滚动肯定是可以的,但一次能看到更多的文字就更好了)。

这就用到了组件 Textarea,这是一个你可以书写的文本字段,而 Output 则是用来给出反馈的。这一点很重要,因为 git push 可能会花点时间或失败,这取决于网络。如果备份失败,用反馈提醒用户很重要:

defeditor(fname):

textarea=ipywidgets.Textarea(continuous_update=False)

textarea.rows=20

output=ipywidgets.Output()

runner=functools.partial(subprocess.run,capture_output=True,text=True,check=True)

defsave(_ignored):

withoutput:

withopen(fname,"w")asfpout:

fpout.write(textarea.value)

print("Sending...",end='')

try:

runner(["git","add",fname])

runner(["git","commit","-m",f"updated {fname}"])

runner(["git","push"])

exceptsubprocess.CalledProcessErrorasexc:

print("Could not send")

print(exc.stdout)

print(exc.stderr)

else:

print("Done")

textarea.observe(save,names="value")

returntextarea,output,save

continuous_update=False 是为了避免每个字符都保存一遍并发送至 Git。相反,只要脱离输入焦点,它就会保存。这个函数也返回 save 函数,所以可以明确地调用它。

创建一个布局

最后,你可以使用 ipywidgets.VBox 把这些东西放在一起。这是一个包含一些组件并垂直显示的东西。还有一些其他的方法来排列组件,但这足够简单:

defjournal():

date=str(datetime.date.today())

title=f"Log: Startdate {date}"

filename=os.path.join(f"{date}.txt")

d,clock=time_out_counter(reactor)

textarea,output,save=editor(filename)

box=ipywidgets.VBox([

ipywidgets.Label(title),

textarea,

clock,

output

])

d.addCallback(save)

returnbox

biu!你已经定义了一个写日记的函数了,所以是时候试试了。

journal()

Jupyter journal

你现在可以写 5 分钟了!

python每天20分钟_每天用 Jupyter 写 5 分钟的日记相关推荐

  1. mysql 日期减10分钟_获取当前时间减去10分钟的话SQL语句怎么写

    获取当前时间减去10分钟的话SQL语句怎么写 Mysql日期和时间函数不求人 本文出自:http://linuxdb.yeah.net 作者: 晏子 (2001-07-05 15:00:00) 对于每 ...

  2. jupyter notebook和python有什么区别_如何在Jupyter Notebook中使用Python虚拟环境?

    如何在使用Jupyter Notebook时,解决Python虚拟环境间的切换问题?本文一步步帮你拆解.希望你能够避免踩坑的痛苦,把更多的时间花在愉快的编程上. 痛点 Python目前有两个主版本并存 ...

  3. 饿了么超时20分钟_饿了么:5分钟;美团:8分钟......消费者:???

    点击上方"华商报"可快速关注哦! 9月8日,一篇名为<外卖骑手,困在系统里 >的文章刷屏,文章指出,在外卖系统的算法与数据驱动下,外卖骑手疲于奔命,导致他们违反交通规则 ...

  4. python浏览器怎么设置_怎么设置jupyter的默认浏览器

    设置jupyter的默认浏览器: 1.打开cmd,首先进入到Jupyter的安装目录,然后,输入命令"jupyter notebook --generate-config" 2.执 ...

  5. python安装死机_安装时jupyter笔记本的R内核死机

    我刚刚在Windows10上安装了jupyter笔记本的R内核,在这个post中得到了与OP相同的错误.下面粘贴的是我单击"内核错误"按钮时显示的错误.在Traceback (mo ...

  6. python秒数变分钟_将毫秒转换为小时、分钟和秒python

    我刚开始编写这段代码,但当我试图运行它时,我总是在主程序上得到无效语法.def convertMillis(millis): seconds=(milli/1000)%60 minutes=(mill ...

  7. python k线合成_手把手教你写一个Python版的K线合成函数

    手把手教你写一个Python版的K线合成函数 在编写.使用策略时,经常会使用一些不常用的K线周期数据.然而交易所.数据源又没有提供这些周期的数据.只能通过使用已有周期的数据进行合成.合成算法已经有一个 ...

  8. python怎么输入程序代码_学习用 Thonny 写代码: 一个面向初学者的Python IDE

    学习编程很难.即使当你最终怎么正确使用你的冒号和括号,但仍然有很大的可能你的程序不会如果所想的工作. 通常,这意味着你忽略了某些东西或者误解了语言结构,你需要在代码中找到你的期望与现实存在分歧的地方. ...

  9. java获取当前分钟_分别获取当前年月日 小时 分钟 秒 毫秒

    [java]代码库/** * 英文简写(默认)如:2010-12-01 */ public static String FORMAT_SHORT = "yyyy-MM-dd"; / ...

最新文章

  1. optee内存管理和页表建立
  2. 添加或删除jupyter notebook的虚拟环境
  3. [转贴]暴雪的霸王条款是否合理?
  4. linux很容易忽略的rz上传、sz下载命令
  5. 【2022年战略管理公开课计划】向华为学习 业务领先的战略规划SP(BLM)和战略解码BP(BEM)
  6. ES分片UNASSIGNED解决方案(ALLOCATION_FAILED,REPLICA_ADDED,NODE_LEFT,REINITIALIZED,CLUSTER_RECOVERED等等)
  7. SamSung WLAN AP:RCE漏洞复现
  8. unity下载并和vs2019关联的步骤
  9. 无线传感器网络技术与应用课后习题部分答案
  10. 77% 的 Android 手机已换上 Eclair 或 Froyo 系统
  11. 篡改页面的Js代码,从而达到为所欲为的目的
  12. LeetCode力扣刷题——居合斩!二分查找
  13. 哈姆雷特的机器人可以合体吗_饥荒哈姆雷特机器人wx-78怎么样 机器人wx-78人物属性详解...
  14. matlab绘制星形线并求面积,星形线面积怎么求
  15. python机器学习视频教程百度网盘下载?
  16. 初入社会经验必备能力总结
  17. 好用的老照片修复神器软件有哪些?这三个工具帮你留住回忆
  18. HFSS仿真线型抛物面圆极化天线
  19. 2022-9 做题时查漏补缺QVQ
  20. 计算机应用基础讨论题目,计算机应用基础简答的题目答案.doc

热门文章

  1. UI设计新趋势|拟物风格UI设计素材模板
  2. 色彩艺术海报PSD模板 | 用色彩挑动你的情趣
  3. python中re模块_Python中re(正则表达式)模块学习
  4. qcow2 磁盘在线扩容方法
  5. Linux内核跟踪eBPF:bpftrace 参考指南
  6. OpenStack Glance(镜像服务)基础架构:Basic architecture
  7. python搭配什么数据库_教你如何优雅地用Python连接MySQL数据库
  8. web前端基础(03html列表知识)
  9. java json 修改字段_我们如何使用Java中的Jackson来更改JSON中的字段名称?
  10. linux下查看usb插拔日志,Linux:如何检测usb键盘是否已插入和拔出