怎样做文档

一份好的设计文档需要提供清晰的问题描述、整体的概要设计、涵盖各个细节的详细设计等。这篇有趣的英文小短文通过一个简单的小例子介绍了Google工程师是怎么写设计文档的。本文为中文翻译。原文链接如下:写文

一份好的设计文档需要提供清晰的问题描述、整体的概要设计、涵盖各个细节的详细设计等。

这篇有趣的英文小短文通过一个简单的小例子介绍了Google工程师是怎么写设计文档的。本文为中文翻译。原文链接如下:

写文档是我在谷歌学到的最重要的技能之一。在谷歌,文档被用来讨论问题、作为真实的信息源、组织知识。在我工作过的其他公司中,没有一家对如何使用文档进行协作有这样深刻的理解。

这篇文章就是关于我在谷歌如何写设计文档的一个例子,这是一个真实的项目,用于在新冠疫情期间控制健身房现场人数。即使在新冠疫情结束后不需要预约健身房了,也可以访问GitHub上的源代码[1]。为了让这篇文章更有趣,现在每个人都可以在谷歌文档[2]上进行评论,而且谷歌文档的格式也比Medium支持的要好。

01 问题描述

在新冠疫情期间,要求健身房控制现场会员总数,要求会员在去健身房之前先在网站上预订。预约需要提前两天,从午夜开始。例如,2021年04月01日的预订将在当地时间2021年03月30日00:00 AM开放。

这个健身房里的游泳池提供的位置非常有限。我尝试了好几次,都没能预定到早上6点的时间,后来工作人员告诉我,由于需求量很大,必须在午夜预订。但是熬夜到半夜会打乱我的生物钟,所以我没法接受。

而且我觉得雇人做这件事也很不好,因为在内心深处,我认为早睡是健康高效生活方式的核心习惯,用金钱剥夺别人的好习惯是不道德的。在被告知没有别的办法之后,我决定写一个程序来为我做预订。

我个人认为用机器人来做工作是对别人的不公平,所以我对这个决定一点儿也没感到自豪。相反,我认为健身房应该提高一些场地的价格。但这显然超出了设计文档的范围,而且是非常主观的想法。

02 需求

自动提前两天在半夜预订健身房

程序启动后不需要人工交互,应该具有容错性,能够进行合理的重试

可以在Mac电脑上运行

用户可以指定用户名、密码、预约的项目、日期和时间等

不在考虑范围内:

只提前1或2天预订,或当天预订

容忍操作系统或网络问题

在预约服务器停止运行后还要能够工作

在网站结构(HTML)改变后,还要能够工作

03 概要设计

浏览器自动化 vs 模拟请求

浏览器自动化是指通过程序来控制真实的浏览器,并在GUI上自动化操作。模拟请求是指让程序通过HTTP与服务器交互,这个程序就像是一个Web浏览器(而不是控制一个浏览器)。

考虑到下面几点,我认为浏览器自动化比模拟请求更好:

[优点] 浏览器自动化启动了一个真实的浏览器实例,所以我们知道程序运行时发生了什么,它使调试和开发更加容易。

[优点] 网站需要JavaScript加载控件,而这较难通过编程实现,可能需要控制一些渲染引擎。

[缺点] 浏览器自动化依赖于HTML结构,而模拟请求依赖于HTTP API,API相对稳定,不太可能改变。

显然利大于弊。

系统概述

image-23465

Selenium[3]是一个提供浏览器自动化解决方案的软件库。我们的程序将用Python编写,并通过Python API控制Selenium,Selenium则通过它的Gecko驱动程序控制Firefox。

Caffeinate[4]是一个阻止操作系统进入睡眠状态的程序。如果系统休眠,程序将无法在半夜运行。

04 详细设计

用户输入

用户名、密码、日期等都是从命令行参数中输入的。

重试

程序将捕获所有异常(页面未加载等)并重试100次直到预订成功,成功的预订通过确认DOM元素进行识别。

浏览器选择

我们需要使用主流浏览器之一。我考虑并测试了Chrome、Firefox和Safari,Safari和Chrome都需要额外的步骤来使用相应的Selenium驱动程序,所以我选择了Firefox。它也需要一些来自操作系统设置的认证,但只需要在最初几次确认就可以了。

日志

程序自动执行浏览器操作,就像是由用户发起的一样。本质上,它将在循环中执行以下操作:

查找某个元素

对元素进行操作(输入文本、选择选项或单击)

等待预期结果,然后返回1

因此,每个日志记录将有两项内容:

执行了什么

在等待什么

这样的日志记录将使调试变得容易。

保持电脑持续运行

定位控制

等待页面加载

book_btn = WebDriverWait(driver,120).until(EC.element_to_be_clickable((By.XPATH,“//button[@ng-reflect-router-link=’/Appointments’]”)))

如果按钮在120秒内加载失败,将引发异常。

更多的实现细节

怎样做文档

选择正确的日期。假设我们想预定4月14日,我们无法在预订日历上选择文本为‘14’的单元格,因为3/14的单元格有类似的属性。当前月份的单元格必须包含有class cal-in-month。

调整月份。预订日历显示的是当月的当天,而不是我们打算预订的月份。如果两天后就是下个月,这就会有问题。因此,我们必须添加另一个步骤实现在这个边界情况下选择正确的月份。

05 操作流程

怎样做文档

假设我想预订4月14日的游泳池,需要在4月11日的任意时间运行以下命令:

python book.py --username xxxxxx --password xxxxxx --day 14 --time ‘5:00 PM’ --sport small_pool

程序将每休眠1秒钟被唤醒检查一次时间,这个检查不会有任何明显的CPU消耗。Caffeinate将阻止操作系统进入睡眠状态,直到午夜时分。

在4月12日午夜,它将启动Firefox浏览器,并自动完成预订。之后,Caffeinate进程和主进程都将退出,操作系统将正常进入休眠状态。

4月12日的早上,我会看一下日志,看看预订是否成功。

一个有趣的事实

竞争确实非常激烈,通常在第1分钟预约就结束了。每个时段总共只有6个名额,毫无疑问,在早上6点预订是不可能的。

相关链接:

上一篇 2023年02月09 20:28
下一篇 2022年12月29 21:04

相关推荐

  • 怎样自学画画,怎么在家自学画画

    怎么在家自学画画,如何学习手绘?新手手绘的学习方法!一些人以前没有接触过绘画,但现在想学习手绘,却发现无从下手,这个时候该怎么办呢?零基础想学习手绘应该怎么做?从何入手?如果自己学习没有思路,那建议可

    2022年12月29 233
  • 季度怎么划分,一年的4个季度怎样划分

    点评12月社融总量延续走弱。2022年12月新增社融1.31万亿,同比少增1.06万亿。社融存量增速继续下滑0.4个百分点至9.6%。分类别来看:1)12月新增人民币贷款同比少增2665亿至1.4万亿

    2023年01月21 214
  • 怎样做文件,制作文件材料

    1.设置优先级虽然您正在进行最新的CAD项目,但您可能会注意到您正在使用的一些文件可能会开始滞后。没有担心,因为有些方法可以提高您的CAD文件速度而不花太多时间删除和/或手动重新组织自己。我们将通过六

    2023年01月05 253
  • 二建怎么报名,自考二建怎么报名

    自考二建怎么报名,不少小伙伴想考二级建造师但是不知道怎么报名,也不知道自己是否符合报名条件,今天我们就来解决这两个问题。一、报名条件:官方给的报考条件是:具备工程类或工程经济类中等专科以上学历并从事建

    2023年02月10 266
  • 爱迪生简介,爱迪生简介30字

    链接:节选:托马斯·爱迪生(ThomasEdison)喜欢打盹。而且,这位伟大的发明家在小睡时有个让人津津乐道的“小动作”:手里拿着一个钢球。托马斯·爱迪生(ThomasEdison)喜欢打盹。而且,

    2022年12月11 262
  • 特殊符号怎么打出来,100个特殊符号

    要说表情是怎么火起来的,那绝对有emoji的功劳。十几年过去了,它依然是全球使用最频繁的表情,没有之一。这几年,emoji官方也加入了许多新表情,从人脸到动物,建筑,汽车,图标等等,覆盖贼广。但是,这

    2023年01月09 235
  • 怎样和女生聊天找话题

    假如你喜欢的女生心情不好,或者寂寞了无聊了,想找你聊聊,你会和她聊什么?“瞎聊呗,多大点事,哪有那么多讲究。”你能这么想,我就放心了,因为你是真的不懂,还是需要我啊!这种时候,女生会来找你,足以说明你

    2022年12月28 235
  • 日语输入法促音怎么打,日语键盘怎么打出促音和拗音

    大家都知道用键盘怎么打日文的字?今天日本村外教网小编就和大家分享一些日语键盘按键汇总,希望能够帮助到大家。日语输入法里面的几个平假名片假名和罗马拼音,大家可以先对照一下:平假名:“あいうえお”;片假名

    2023年02月06 228
  • 钢铁是怎样炼成的主要内容50字,钢铁是怎样炼成内容概括400

    《钢铁是怎样炼成的》内容概述出身于贫苦铁路工人家庭的保尔·柯察金,早年丧父,全靠母亲为人洗衣赚钱,将他养大。12岁那年,保尔·柯察金离开了学校,这一年他才12岁。因为补考的时候,他把烟灰撒在了瓦西里神

    2022年12月31 239
  • 成本价怎么算,求成本价的数学公式

    庄家坐庄就像做生意,也有投资成本。他们的持仓成本,往往就在建仓所引发的活跃成交量之中。因此,要推算他们的持仓成本,求成本价的数学公式,就需要找出活跃的成交量或密集成交区并确认为做多量能后,采取一个折中

    2023年01月15 238
  • 特殊符号大全怎么打,100个特殊符号

    王者荣耀特殊符号有哪些?王者荣耀空白符号怎么打?好多玩家在玩游戏的时候想一个非常炫酷的名字,但是不知道怎么办才好,100个特殊符号,下面小编就把最火的特殊符号分享给大家。,王者荣耀特殊符号空白代码名字

    2023年01月30 224
  • CraigCalhoun《Degenerations of Democracy》作品简介与读书感悟

    一、理论是什么?为什么要阅读经典?杰弗里·亚历山大,2008,《科学思维中的理论逻辑》,见《社会学的理论逻辑:实证主义、预设与当前的争论》,于晓、唐省杰、蒋和明译,北京:商务印书馆。杰弗里·亚历山大,

    2022年12月14 292
  • 怎样套路别人叫你爸爸,能让人不知不觉喊爸爸

    又到了一年一度的愚人节想想去年那些被整蛊的日子好像就在昨天想到这里你是不是已经开始瑟瑟发抖了莫慌张今天教大家几个反套路小技巧给对方一个手足无措猝不及防防不胜防咱就是说中国人不骗中国人大招这就奉上第1招

    2023年01月03 248
关注微信