当然,也有 Firebase 模拟器,但它们很慢,也很难调试,而且普遍存在不足;经常会在负载不是很大的情况下出现意料之外的失败,而你可能期望有一个能够承受足够负载的、健壮的本地环境。...Firebase CLI 限制相当严格: 对于像启用 Firestore 这么简单的事情,你也只能通过仪表板完成,而不能通过命令行。 firebase login:ci 有意禁止传递认证密钥。...在过去的几个月里,开发人员偶尔会反馈由于缺少权限而导致 Firebase Hosting 失败。我们的团队上周也开始报告这个问题。...尽管 Firebase 开发有所下降,但我最近还是经常在这个权限仪表板上看到自己。 根据 Cloud Function 部署文档:Firebase 错误只能在 Google Cloud 上解决。...Supabase 正基于 Deno 开发他们的无服务器函数套件,这表明他们对优秀的技术很重视。 我们喜欢 Supabase 使用的 PostgreSQL。
现在我们需要手动更新成功操作和失败操作才行。 这是为什么?在后端,数据库本来就能做乐观更新啊——为什么我们不能在浏览器中这样做?...新的代码更改有时会引入一些你意想不到的方法来更新数据库对象。突然之间,你就遇到了麻烦。 这里要问的问题是,为什么要在 API 级别进行身份验证?...于是乎,现在只有少数代码更改(而不是大多数更改)会影响权限了。 G. 审计、撤消 / 重做 并且在某些时候,我们要完成的需求会增加复杂性。 例如,假设我们需要支持“撤消 / 重做”,用于好友操作。...从本质上讲,能做到这一步的程序员都变成了数据库工程师。但是,如果我们在浏览器中有一个数据库,让它扮演分布式数据库中的一个“节点”,上面的任务不就可以自动完成了吗?...至于剩下的项目(审计、撤消 / 重做、写入的离线模式、衍生数据)——Firebase 还没有解决它们。
假设你写了一些可以完成任务的粗糙代码,但你永远不需要再碰它。这不是技术债务。 假设你编写的代码在某种程度上给你带来了操作负担。处理混乱代码带来的操作负担所花费的时间就是你为债务支付的利息。...这是在一堆垃圾代码之上构建的垃圾代码。错误修复和新功能自然需要越来越长的时间才能完成,这让管理层很不高兴,他们也不知道为什么。他们拒绝承认,他们所培育的快速完成工作的工程文化才是问题所在。...现在我们有了一位更有经验的移动开发人员,他们对现有的代码库感到震惊。 代码实现了模糊或不确定的规范。这种情况通常发生在产品所有者对开发过程中出现的功能问题没有明确答案,而让开发人员自行决定如何工作时。...在员工离职或数据泄露的情况下,无法远程禁用机器 没有本地 DNS。所有机器都使用 /etc/hosts,经wc -l检查发现,该文件目前长度超过 350 行。...这就是为什么工程师们会选择这种快速而粗糙的解决方案,因为 1) 这让他们看起来不错,可以快速完成工作 2) 没有人会因为后来出现的问题责怪他们 3) 即使他们受到指责,他们也经常将其推给 QA。
我在这里将这些评论汇总成一个建议的失败原因列表。 其中一些原因对他们来说有一定的道理,但它们是症状而不是原因。 事后看来,有两件事出了问题——我们选择了一个糟糕的市场,并针对错误的指标优化产品。...他们希望产品在需要时实际存在,而不是三年后。 触手可及的速度。人们希望 RethinkDB 能够快速处理他们实际尝试过的工作场景,而不是我们建议的“现实世界”中的场景。...例如,他们会编写快速脚本来测量插入一万份文档而不读回它们需要多长时间。MongoDB 出色地掌握了这些场景,而我们则打了一场失败的教育市场之战。 一个用例。...我们无法理解为什么人们会选择一个几乎不做它应该做的事情(存储数据)的系统,有一个大内核锁,随机抛出错误,实现单节点功能,尽管分片系统是产品的核心功能之一,但它几乎不能正常工作,基本上没有提供正确性保证,...早期的 RethinkDB 有点像这样。我们对产品或市场没有直觉,所以我们会在没有真正了解我们在做什么的情况下完成建立公司的动作。更重要的是,我们有巨大的乐观偏见。
事实上,对于任何有经验的软件开发人员来说,将基本的JavaScript功能构建到网页中都是一项相当简单的任务,即使他们是JavaScript的新手。...正如这些例子所表明的那样,类型强制转换规则有时会一清二楚。因此,除非明确需要类型胁迫,否则通常最好使用===和!==(而不是==和!=),以避免类型胁迫的任何意外副作用。(==和!...因此,如果在没有名称的情况下调用构造函数,则名称将默认为default。...否则将被忽略或默默失败的代码错误现在将生成错误或抛出异常,更快地提醒您代码库中的JavaScript问题,并更快地将您引导到它们的源代码。 ·防止意外的全局。...当尝试删除不可配置的属性时,非严格代码将默默失败,而在这种情况下,严格模式会引发错误。
您可能会问,为什么不捕获所有可能的异常以确保没有遗漏。这种做法并不推荐,因为它带来的问题比解决的问题还要多,我仅在稍后会讨论的一些特殊情况下才会推荐这样做。...因此,现在我们将以一种全新的视角来探讨错误,这种视角专注于错误本身,而不是处理它们的技巧。希望这能让你更容易知道如何应对。 首先,我们需要根据错误的来源进行分类。...这个函数试图从数据库中获取与歌曲关联的艺术家信息,但这个过程有时会失败,比如在添加某位艺术家的第一首歌时。...这里需要特别指出的是,raise关键字会中断当前函数的执行。这是必需的,因为我们已经认定这个错误是无法恢复的,所以错误之后函数的剩余部分将无法完成它们的任务,也不应该继续执行。...在任一函数执行过程中,数据库可能因为云服务的问题而离线,导致所有的查询和提交操作暂时失败。 如果我们无法从这些错误中恢复,那么尝试捕获它们也就没有意义。
如果它们失败了,您需要更新您的功能代码并重新测试。一旦测试通过,下一步就是重新开始(您可能首先需要根据需要重构设计中的任何重复,将TFD转换为TDD)。 图1所示。测试优先开发(TFD)的步骤。...与其先编写函数代码,然后再编写测试代码,如果您真的编写了测试代码,那么您应该在编写函数代码之前编写测试代码。此外,您可以通过非常小的步骤来完成—一次测试和少量对应的函数代码。...采用TDD方法的程序员拒绝编写新函数,直到第一个测试失败,因为该函数不存在。事实上,在对代码进行测试之前,他们甚至拒绝添加任何一行代码。...挑战在于,这两种形式的TDD都要求从业者具有技术测试技能,而许多需求专家通常没有这些技能(这也是为什么泛化专家比专家更可取的另一个原因)。 TDD的一个基本假设是您有一个可用的测试框架。...我认为Bob Martin说得很好:“编写单元测试的行为更多的是一种设计行为,而不是验证行为。它也更多的是一种文件化的行为,而不是验证的行为。
神经网络是很好的函数逼近器和特征提取器,但有时它们的权值过于专门化而导致过度拟合。这就是正则化概念出现的地方,我们将讨论这一概念,以及被错误地认为相同的两种主要权重正则化技术之间的细微差异。...神经网络非常擅长于逼近线性或非线性函数,在从输入数据中提取特征时也非常出色。这种能力使他们在计算机视觉领域或语言建模的大范围任务中执行奇迹。但是我们都听过这句名言: “能力越大,责任越大”。...这句话也适用于无所不能的神经网络。它们强大的函数逼近功能有时会导致它们对数据集过度拟合,因为它们逼近了一个函数,这个函数在它所训练的数据上表现得非常好,但在测试一个它从未见过的数据时却惨败。...正则化 正则化可以定义为我们对训练算法所做的任何改变,以减少泛化误差,而不是训练误差。有许多正则化策略。...Reparametrized L2 Regularization equation 从上面的证明,你必须理解为什么L2正则化被认为等同于SGD情况下的权值衰减,但它不是其他优化算法的情况,如Adam,
我知道,这是完全不现实的情况,对吧? 不幸的是,日志或日志消息似乎经常在错误的时间出现。...如果底部没有帮助,并且你的代码已经有一段时间没有被连接了,那么运行它将是非常有帮助的。我推荐pylint或者flake8。通常情况下,它指向了我一直忽略的错误。...想想看,当蛋糕没有起酥的时候,忘记加发酵粉是多么的明显。 是时候查看一下堆了。很有可能问题出在代码中,而不是Python核心,甚至不是第三方软件包,所以先扫描堆栈,在代码中寻找代码行。...题外话 为什么不是一个打印声明?我过去常常依赖于打印语句。它们有时仍然派得上用场。但是一旦我开始处理复杂的代码库,尤其是那些打网络电话的代码库,打印就变得太慢了。...继续前后移动,顺着堆栈向上移动,找出您的调用偏离轨道的地方。如果您一直到达跟踪的顶部而没有遇到断点,那么恭喜您,您已经发现了问题:您的应用程序拼写错误。这里没有经验,没有,一点也没有。 4.
它们是以基本原则为基础的,应当以这些原则为依据,而不仅仅是以个人意见为依据,有时几乎都没有选择的。...鼓励开发者解决他们知道现在需要解决的问题,而不是推测将来可能需要解决的问题。...测试并非来测试它们本身,一般也极少为了测试而测试(如测试一下测试代码有没有问题又走了测试流程),因此我们要保证测试是有效的。 当代码真的有问题,测试是否会失败?...沮丧很多时候是对于cr评论的写作方式有关,而并非来自reviewer对于代码质量的坚持。 晚点再来整理干净 一个常见的推迟原因是开发人员希望完成任务(这可以理解)。...这不是因为开发人员不负责任,而是因为他们可能有很多其他工作要完成,于是清理工作便会在成堆的工作中被遗忘。因此,通常最好坚持开发人员在代码在合并后清理它们。
有人认为“问责”是指因为错误的决定而受到惩罚,或者是必须面对自己行为的后果。Brush 则认为,“问责”是组织保证你会被根据自己为所负责的事情而做出的相关行为,所产生的后果进行评估。...有时会相信通过概率、可能性或是一些侥幸,才能让事情完全正确或完全错误。这种情况下,如果只评估结果,那么你会对组织以及什么可行、什么不可行有非常糟糕的理解。...这本书中,还探讨了人们会因为什么才会更快乐。人们不会因为升职加薪或是其他什么原因而更快乐,因为这类事情发生的频率太低了,所以它们不是个好的激励因素。...但这会导致人们缺乏改进的动力。状态好的人达成了目标后会开始摸鱼,毕竟他们已经完成了任务,而离目标还有十万八千里的人可能会觉得这个目标太难了,他们下辈子都没办法完成,并最终放弃了实现这个死目标的动力。...因为在这种文化内,没有人会这么做,也没有人会去提及这些东西。而如果人们会因为提出风险或者承认失败而受到惩罚,那么他们也将被要求对任何决定做出毫无转圜余地的承诺,只能承诺不能否定。
糟糕的程序员操心代码,优秀的程序员操心数据结构以及它们之间的关系。--Linus Torvalds 在代码注释中解释你为什么要写这些代码,而不是解释你在做什么。但不要过度描述,不要把注释当成小说写。...100% 的代码行或分支覆盖率并不意味着你的代码就没有 bug。测试用例要覆盖所有的功能需求,而不是覆盖代码行或分支。...当你在某个问题上困了很长一段时间而没有任何进展时,重新描述这个问题或向别人解释这个问题,大多数情况下这样做都会有神奇的效果。为什么小黄鸭调试法会如此受欢迎,现在你应该知道答案了。...如果你的经理没有为你的失败负责,并责怪你,那么在他们手下工作就是在拿你的个人和职业发展冒险。 经验年限只是一个数字。有时候你会发现初级工程师比高级工程师对某些事情更熟悉。...12额外的建议 记住帕累托法则 (80/20 法则),它几乎适用于软件工程的方方面面: 80% 的工作是由 20% 的工程师完成的; 80% 的影响是由 20% 的工作所带来的; 80% 的错误是由
糟糕的程序员操心代码,优秀的程序员操心数据结构以及它们之间的关系。--Linus Torvalds 在代码注释中解释你为什么要写这些代码,而不是解释你在做什么。但不要过度描述,不要把注释当成小说写。...100% 的代码行或分支覆盖率并不意味着你的代码就没有 bug。测试用例要覆盖所有的功能需求,而不是覆盖代码行或分支。...当你在某个问题上困了很长一段时间而没有任何进展时,重新描述这个问题或向别人解释这个问题,大多数情况下这样做都会有神奇的效果。为什么小黄鸭调试法会如此受欢迎,现在你应该知道答案了。...如果你的经理没有为你的失败负责,并责怪你,那么在他们手下工作就是在拿你的个人和职业发展冒险。 经验年限只是一个数字。有时候你会发现初级工程师比高级工程师对某些事情更熟悉。...额外的建议 记住帕累托法则(80/20 法则),它几乎适用于软件工程的方方面面: 80% 的工作是由 20% 的工程师完成的; 80% 的影响是由 20% 的工作所带来的; 80% 的错误是由 20%
好吧,猜猜是什么,到中断功能触发或通知云用户时,损坏可能已经完成了。 结算大约需要一天的时间,因此这就是我们第二天注意到收费的原因。 3. Google应该向我们收取$ 100,而不是$ 72K!...Google的最后一天 另一个任务是了解我们的错误,并制定我们的产品开发策略。并非团队中的每个人都知道发生了什么,但是很明显我们遇到了一些大麻烦。...6 我们所有的错误 在云上部署有缺陷的算法 上面已经讨论过了。...在不完全了解Firebase的情况下使用Firebase 有些事情只有经过大量的经验才能学到。Firebase不是一种可以学习的语言,它是Google提供的容器化平台服务。...它具有由他们定义的规则,而不是由自然法则或特定用户可能会认为的规则来定义。 ? 另外,在Node.js中编写代码时,必须注意后台进程。
虽然我们的确永远无法确保一个系统没有任何漏洞——毕竟系统都是由不完美的人类所完成的,但是“任何系统都可以被攻破”这一观点却是错误的。自90年代初以来,我们利用密码技术已经可以实现完全免受黑客攻击。...这不是因为密码学不起作用,也不是因为有人“破解”了密码学——就像你的银行错误地处理了你的账户时不是数学的错误、你的妈妈下载不熟悉的附件而感染计算机病毒时不是电子邮件的错误一样。...如果你能猜到这些地址的私钥,那么你就可以将其中的钱发送给任何人。与密码不同,你可以在自己的机器上本地验证私钥,没有服务器会限制你的尝试次数或频率。 那为什么还没有人偷走这些钱呢?...答案在于用作私钥的数字近乎荒谬的大小。它们足够大。 我们从一个简单的思维实验开始。想象一下,你的私钥足够大,大到世界上所有的计算机一起工作,他们需要24小时才能猜到。...如果在你的私钥上增加仅仅一位数字,计算机就需要十倍的计算量,也就是需要十天而不是一天。而增加六位数字会使这一时间达到27000年。 在任何情况下,生成私钥所需创建随机数的计算能力都是微不足道的。
这就是为什么许多开发人员在他们的变量和函数名前面加上了一些与插件本身相关的独特的东西。除了消除代码冲突之外,在启用了大量插件时,还可以更容易地发现问题。...有了这个,我可以轻松地阅读和管理代码,而不必担心有很长的唯一名称。 在使用它们之前,我建议您很好地理解命名空间,因为它们常常以错误的方式使用。...这就是为什么重新安装WordPress的原因(是的,如果你有最后一个版本的话),因为任何被入侵的文件都将被真正的WordPress核心文件所覆盖。...12.使用WordPress函数和代码片段但不理解它们 通常情况下,当开发人员陷入困境并在StackOverflow这样的地方找到解决方案时,他们很高兴他们设法使某些工作成功,而不去理解该代码背后的逻辑...2.虽然代码执行其工作,但它可能包含不需要实现的任务的无效函数。如果代码没有进行优化,那么这种“复制粘贴”的实践可能会导致维护网站的速度变慢,尤其是在项目的不同位置使用了多个代码片段。
在这种压力下,我们经常会感到恐慌,并且担心如果我们没有完成工作会怎么样。这限制了我们清晰思考的能力,而短暂的休息通常会让我们再次高效地工作。 3....由于某些部分需要先完成,因此他们可能还必须重新编写部分代码,否则他们的代码顺序就会变得很凌乱,他们就不理解编写好的代码了(我有时也会犯这种错误,我对此感到很内疚)。...原型的价值在于它为你提供的学习方法,而不是代码本身。 建议: 在你着手编写代码之前,请花一周左右的时间列出项目的所有主要特性,以及如何编写它们。...另外,有许多错误过于笼统,可能会包含许多不是你所面临的问题。...对于初级开发人员来说,排除此类通用错误是非常困难的,在这种情况下,最好由高级开发人员进行指导,他们可以指出你编写的代码的确切问题,并为你提供帮助。询问学校的毕业班学生或者老师会是一个不错的选择!
机器学习系统不仅在许多应用中取代了旧有的算法,而且在许多曾经被人类做得最好的任务上也占尽先机。尽管这些系统并不完美,但它们的错误率已经表现比人类更好了。...更重要的是,如果人类完成了一项任务,我们会很自然地假设此人在相关任务中具有一定的能力。但是,机器学习系统是被训练来完成特定的任务,因此通常他们的知识不会泛化。...但要注意的是,机器学习系统是无法完全代替这个职位、流程或业务模型的。大多数情况下,它们是对人类活动的补充,使他们的工作变得更有价值。对于新的劳动分工来说,最有效的规则很少是“把所有的任务交给机器”。...这可能会使证明系统在所有情况下,尤其是在没有在培训数据中表示的情况下工作很难,甚至不可能。缺乏可验证性对于任务型的应用场景是一个问题,例如控制核电站,或者涉及生死抉择。...讨论人工智能的极限可以从毕加索对计算机的观察出发:“但它们是无用的,只能给你答案。”它们当然不是一无是处,正如机器学习最近的胜利所彰显的那样,但毕加索的观察仍然提供了参考。
❝FID所测量的用户输入事件必须是「离散的」(有限的)。 ❞ 连续类型的用户交互,如缩放或滚动页面,无法准确地使用该指标进行测量。这是因为它们通常不在浏览器的主线程上运行并具有不同的约束条件。...---- FID测量的是输入延迟,而不是处理延迟 FID并「不测量由于用户交互而导致的网页实际处理或更新」。这是因为开发人员可以通过将事件处理程序与与事件相关的任务分离来操纵FID。 ---- 3....为什么会出现输入延迟呢 ❝输入延迟(Input Delay)是指在没有用户请求的情况下加载页面元素,例如图像或脚本。...然而,在某些情况下,这些资源可能会在没有用户直接请求的情况下被加载。例如,当网页中的脚本文件被设置为自动加载,并且不是在用户直接与网页交互时才加载,就会导致输入延迟。...如果将它们分解为较小的任务,用户输入可以在它们之间被处理。尽量保持任务在「50毫秒以下」以确保安全。 我们使用setTimeout模拟长任务。
TensorFlow对象目标检测API demo可以让您识别图像中目标的位置,这可以应用到一些很酷的的应用程序中。 有时我们可能会拍摄更多人物照片而不是景物照片,所以可以用同样的技术来识别人脸。...他们可以使用他们识别猫的过程,但将其应用于稍微不同的任务。这就是迁移学习的原理。...我没有时间去找到并且标记太多TSwift的图像,但是我可以利用从这些模型中提取出来的特征,通过修改最后的几层来训练数以百万计的图像,并将它们应用到我的分类任务中(检测TSwift)。...训练模型需要所有的这些文件,所以需要将它们放在我的云存储桶中的同一个data/目录下。 在进行训练工作之前,还需要补充一点。...这里的重点不是准确性(因为我的训练集中只有140张图像),所以模型错误地识别了一些可能会误认为tswift的人的图像。
领取专属 10元无门槛券
手把手带您无忧上云