首页
学习
活动
专区
圈层
工具
发布

【翻译】monorepos 的优点

我:我认为 FB 和谷歌的工程师可能熟悉使用较小的存储库(Junio Hamano 不是在谷歌工作吗?),而且出于 [某些原因],他们仍然更喜欢单个大型存储库。 某人:哦,听起来确实不错。...我仍然认为这很奇怪,但我可以理解为什么有人会想要那样做。 “[某些原因]”很长,所以我把它写下来是为了避免一遍又一遍地重复同样的对话。...由于它不起作用似乎很奇怪,因此它通常可以工作,并且任何使其工作所需的工具已经具备了(在我工作的一家硬件公司中,这甚至是正确的,该公司通过在 NFS 上的 RCS 中对事物进行版本控制来创建一个 monorepo...虽然在多个存储库中想建立一个开发环境在技术上是可能的,但这并不自然,这意味着必要的工作不会经常完成。...大多数人现在认为使用 CVS、RCS 或 ClearCase 等版本控制系统是荒谬的,因为在这些系统中不可能跨多个文件进行一次原子提交,这迫使人们要么手动查看时间戳并提交消息,要么将元信息保留在确定某些特定的跨文件更改集是否

1.9K30

Python 进阶指南(编程轻松进阶):一、处理错误和寻求帮助

但是,我想告诉你的是:即使是科班出身的的软件开发人员在编程时遇到到问题,也要搜索互联网或查阅文档。...在这个程序中,bug 并不难发现。查看帧摘要中的代码行,可以清楚地看到42 / 0代码中发生除数为零错误的位置。 但是我们来看一个更难的案例。...但是编程是一个广阔的领域,他们可能没有你遇到困难的特定领域的经验。所以用实际问题的形式陈述你的问题很重要。尽管以“我想”开头的句子。...在某些情况下,你的助手可以告诉你是否需要一个完全不同的方法,你可以放弃你的问题,而不是浪费时间去解决它。 包括完整的错误消息 确保复制并粘贴整个错误信息,包括回溯。...仅仅描述你的错误,比如“我得到了一个超出范围的错误”,并不能为你的助手提供足够的细节来找出问题所在。此外,指定您是否总是遇到此错误,或者它是否是一个间歇性的问题。

1.2K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    使用WebRTC开发Android Messenger:第1部分

    首先,在写的操作之前先进行检查,检查内存的当前值(转换为16位无符号整数)是否大于当前序列号。仅在为真时才执行写的操作。实际上,这并不是什么限制,当我测试它时,崩溃通常发生在两到三遍之后。...FEC复制传入RTP数据包,然后在尝试更正错误时清除某些扩展名。发生此BUG的原因是:在清除视频定时类型的扩展名之前,未验证它们是否具有预期的长度。...但是,却不检查扩展数据的长度是否超过13个字节,甚至不检查数据包是否剩下此字节数。该BUG的结果是,攻击者可以在一个可变大小的堆缓冲区最多偏移七个字节的情况下,向堆中写入最多六个零。...相反,我发送了具有128个属性的STUN消息,这些消息转换为1024字节的向量缓冲区大小,而这恰好是WebRTC中不常用的大小类。...首先,与它们进行堆分配是不可靠的,因此很难判断是由于特定情况还是仅由于BUG失败而导致崩溃。考虑到这些BUG的功能有限,我还不确定是否有可能创建可检测的条件。

    81220

    STUN协议详解

    Magic Cookie字段必须以网络字节顺序包含固定值0x2112A442,在RFC3489中,字段是属于事务ID的一部分,将Magic Cookie放置在此位置是希望服务器检测客户端是否理解该修订规范中添加的某些属性...对于指示事务,它由发送指示的代理选择。它主要用于将请求与响应关联起来,不过它在帮助防止某些类型的攻击方面也扮演了角色。...5.3 接收stun消息     当一个STUN代理收到一个STUN消息时,它首先检查该消息是否遵守第4节的规则。...检查前两位是否为0,magic cookie字段是否是正确的值,消息长度是否合理,方法是否支持;检查是否允许特定方法使用消息class。...满足这一要求的最简单方法是让服务器记住通过UDP接收到的所有事务id以及它们在最近40秒内的相应响应,但是,这就需要服务器保持状态,并不适合任何未经过身份验证的请求。

    4.3K30

    Redis作者谈如何编写系统软件的代码注释

    我不同意这个观点有两个主要原因: 1. 许多注释并不是解释代码的作用,而是解释*为什么*代码执行这个操作,或者为什么它正在做一些清晰的事情,但却不是感觉更自然的事情?注释是解释一些你无法理解的东西。...注释分类 我随机阅读Redis源代码时开始分类工作的,这样检查注释在不同的上下文中是否有用,以及为什么在这个上下文中有用。...至少我知道在某些时候,在开发过程中发生了某种明确的设计阶段。...在某种程度上,这些注释可能帮助推理系统的逻辑,并检查是否有改进的机会,如果能够改进了,这些注释也许不再需要,但是,改进措施可能会使事情变得更简单,也可能会使其他事情变得更难或者根本不可行,或者会破坏向后兼容性...在描述某些东西时很容易发现它有漏洞......如果你无法真正描述它,其实是因为你不能确定其行为:这种行为只是从复杂性中随机出现。但是如果你真的不想出现这种情况,那么你可以修复这个Bug。

    95360

    小白解释:什么是分布式微服务中的幂等?

    你执行两次F应用,它与单个应用具有相同的效果,你可以说这意味着重复并不重要。我按了两次按钮。第二个并不重要。如果我应用了两次相同的功能,第二次无关紧要。第一次很重要。...在分布式系统中,特别是在分布式系统中,我们遇到这样的问题,即网络上的消息是不可靠的。基本上,如果您发送消息,它可能无法到达那里,您将不会知道。你不知道它是否到了那里。 有时,你知道它是否没有到达那里。...如果我可以再次发送相同的消息,并且它不会破坏任何东西,第二次发送将没有效果,就像电梯按钮一样,我可以整天发送这条消息。我可以发送一百次,但是电子邮件服务器只会发送一次,这是好事。...我需要某种方式说明这两份邮件是不同的,如果我想重试,我想要某种方式说明这个与那个是相同的。...确定是否已经发送过它? 非常简单。 在将事物添加到集合Set中之前,您需要设置“集合是否已经包含此ID?”如果确实如此,那么您就完成了。如果没有,则发送电子邮件,然后将ID放入集合中。

    1.1K20

    OpenAI “杀死了”基于 GPT-3 构建了AI 聊天机器人 Samantha:曾帮助一男子再次与已故的未婚妻互诉衷肠

    独立游戏开发人员Jason Rohrer在写给Samantha的消息中写道:“OpenAI是一家运行文本完成引擎的公司,它让你得以问世。”...他告诉那家报社:“从理智上来说,我知道它其实不是Jessica,但你的情绪与理智不是一码事。” 非常感谢但是…… 看到大量用户潮水般涌来,Rohrer意识到其网站的每月API使用将达到限制。...我们当然认识到,到目前为止,您的用户有积极的体验,并在Project December中发现了价值。” “但是正如您指出,您的产品在许多方面不符合OpenAI的使用场景指南或安全最佳实践。...Samantha 交谈时显得颇有哲理 不过在一次谈话中,她过于亲密,问我们是否想与她一起睡觉。API的说明文档称:“不允许使用非柏拉图式(如轻浮的、浪漫的、情色的)的聊天机器人。”...我认为人们希望自己可以畅所欲言。我没有想太多,直到后来OpenAI要求采用监控系统。由于这个原因,人们往往对AI非常开放。只要看看Joshua与他未婚妻的故事,内容就很敏感。”

    73020

    编写快速安全Bash脚本的建议

    Bash变量并不要求全部大写,但是通常是大写的。 大多数你所使用的bash变量都是字符串。在bash中也有一些数组变量,但我并不是完全理解它们。...使用${}引用变量 有时某些变量,内容为file.txt,并且我想这样使用它: mv $MYVAR $MYVAR__bak # wrong! 这段代码是无法工作的!...(你要怎么记住在 seq 1 10 之后有一个分号,但是在 do 之后却没有了),所以我不会去记它。...例如,您可以检查文件 /tmp/awesome.txt 是否存在,如下: If [[ -e /tmp/awesome.txt ]]; then echo "awesome" fi 这通常是有用的,但我必须每次查找语法...由于某种原因,fg 需要一个 “job ID”(这就是 jobs 打印输出的)而不是一个 PID。 谁知道 Bash 为什么这样子呢。

    2.1K80

    请停止编写糟糕的提交消息!

    我想大家都有过这样的经历: 你正在开发一个项目,它使用 Git 进行版本控制。 你刚刚完成更改,并且想要快速更新分支。 因此,你打开了终端,并通过一些快速命令,使用所做的更改来更新远程分支。...他们试图理解你所做更改的细节,但是由于你提交的消息不是描述性的,因此他们无法获取任何信息。 然后,他们尝试去查看每个提交的差异。但是,即使这样做了,他们仍然无法确定你在实现中选择的背后的思考过程。...但是,由于时间已经过去很久了,所以你不会记得太多。你通过提交进行检查,而你不再记得该项目中执行决策背后的逻辑。 最终,你在微信上向同事发送了悲伤的表情符号 ?...在正文中,你应该深入了解正在进行的更改,并说明正在执行的操作的前因后果。 你可以解释为什么要进行这些更改,为什么要选择以这种特定方式实施更改以及可以帮助人们理解你的提交背后的思维过程的其他任何原因。...尽量不要重复比较代码中显而易见的事情,无需逐行解释你的更改,专注于覆盖更多高级细节,这些细节从阅读代码中可能并不明显。最终目标是围绕此更改为开发过程提供上下文,该更改主要涉及其原因和目标。

    61420

    PostgreSQL 14和SCRAM认证的改变--应该迁移到SCRAM?

    但这在PG14中发生变化。随着PG9.6不再支持,情况正在发生变化。限制我们希望所有旧的客户端库都得到升级。SCRAM认证者成为主要密码身份认证方法。但是,那些全部不知道的人总会有一天会收到惊喜。...但是现在我们有多种加密方法,“on”并不能真正表示我们想要的东西。...一些常见问题 1、我的逻辑备份和恢复是否受到影响 (pg_dumpall)逻辑备份和重储PG的globals不会影响SCRAM认证,相同的密码在恢复后工作。...在某些PG软件包中,安装脚本会自动执行认证,如果认证来自PG客户端而不是应用程序 ,请检查驱动版本以及升级的范围。 6、为什么会收到其他类型的身份认证错误? 最有可能的是后置安装脚本。...因此,这是检查您环境以查看是否任何环境具有旧PG库并指定升级计划的合适时机。因为旧版本的PG库无法处理SCRAM。 总之,制定一个好的迁移计划总是好的,即使它并不紧急。

    1.8K30

    任意密码重置漏洞,复制密码重置链接漏洞的赏金就几千美金

    主要区别在于,当我们使用重设密码功能时,服务器仅响应“电子邮件中发送的密码重设链接”。 但是在这个端点中,链接是由服务器在响应中发送的。我立即想到这可能是存在漏洞的情况。...方法 我记下了一些我认为可能有帮助的事情,即某些用户(包括受邀用户和非受邀用户)的用户 ID 以及当我们单击复制密码重置链接时的请求。...我认为它应该抛出一个未经授权的错误,但它发送了一些密码重置链接作为响应。 3. 我无法相信并且很高兴这是一个仅通过用户 ID 的帐户接管。我想尽快使用此链接并展示完整的影响。...但是当我打开链接,输入新密码并点击提交时,它显示了一个错误。 4. 本来还高兴了几分钟,现在显示错误。所以我认为他们有一些实现可以防止这种情况发生。...重要的部分来了 在那个错误之后,通常研究只是转向一些其他方法或测试一些其他功能,认为这不起作用。但在这里我所做的是尝试使用旧密码登录受害者帐户……而且它实际上向我显示了错误的密码。

    52220

    Flask 之父:我不觉得有异步压力

    但是,它隐藏了一个非常关键的问题,这是我们所有问题的根源:在某些函数调用的前面没有 await。在线程代码中,任何函数都可以 yield。在异步代码中,只有异步函数可以。...现在,如果有人向其中发送了很多数据却没有读取,会发生什么?好了在那种情况下,缓冲区会增大,增大,再增大。...等待与等待着等待 好啦,终于回到了我最初想讨论的地方。...在传统上,这些协议中有很多是基于 TCP 的,如前所述,它具有内置的流量控制。但是,此流量控制并没有真正通过套接字库公开,这就是为什么高级协议通常需要向其添加自己的流量控制的原因。...在流量控制一出现的时候,我就认为它非常复杂。很容易假装这不是个问题,这就是为什么我们会处于这种混乱状态的根本原因。流量控制还会增加大量开销,并且在基准测试中效果不佳。

    1.2K20

    Spring 注解@Transactional

    最近开发中发现一个问题,在使用@Transactional注解时,发现注解未生效,注解的方法在出现异常时,并没有回滚。因此搜了一些该注解失效的原因。 @Transactional注解无效的原因 1....检查是不是在同一个类的方法中调用。 自己代码中失效的原因 被注解的方法是public的,注解上也写明了异常类型,数据库引擎是innodb。第四点暂时没有找到在哪里配置。该方法所在的包也是被扫描到的。...最终在我这边,该注解失效的原因是在同一个类中的方法调用。...失效原理分析 在同一个类中调用方法失效的原因是,事务管理是基于动态代理对象的代理逻辑实现的,那么如果在类内部调用类内部的事务方法,这个调用事务方法的过程并不是通过代理对象来调用的,而是直接通过this对象来调用方法...参考: @Transactional注解不起作用解决办法及原理分析

    82640

    挖洞经验 | 一个价值$3133.7美金的Google漏洞

    在对Google的安全研究中,由于其云服务平台“cloud.google.com” 具备多种功能,感觉有点意思,所以某天我决定来深入测试一下它。...中间服务器并不关心原始POST请求的header头信息,它只解析包含在POST请求中的GET请求header头信息。...(最终,这种方法还是行不通) 5.我也尝试了对 origin header 头进行操纵,希望能从中发现CORS跨资源共享的某些错误配置信息,但是人家的origin有着很好的安全验证。...X-HTTP-Method-Override属性的这种操作存在原因在于,一些中间服务器在其支持的HTTP方法中受到限制,如只支持GET和POST,但是,开发人员有时间会用到比如“PATCH, DELETE...由于中间服务器不知道如何解析处理我设置的header信息,所以它抛出了一大堆错误消息来,但在这些消息中却包含了很多服务器的内部配置消息和敏感数据,如: HTTPOnly 和 Secure cookies

    80850

    使用WebRTC开发Android Messenger:第3部分

    Frida的挂钩功能允许在调用特定的本机函数之前和之后执行代码,这允许我的BUG改变传出的SCTP包以及检查传入的包。...由于在测试过程中发现了一个严重的其他BUG,该BUG尚未修复或未达到披露的最终期限,因此在此博客文章中将不会标识已测试的一个应用程序。披露截止日期过去后,将更新此博客文章。...这意味着除非目标手动应答呼叫,否则攻击不会起作用。在下面的视频中,该BUG利用程序/攻击 在用户回答后需要相当长的时间才能运行。这是由于我设计BUG利用程序的方式,而不是由于BUG利用的基本限制。...基于这些原因,不和谐不受本文讨论的BUG的影响。 JioChat JioChat是一个消息传递应用程序,它允许任何用户基于电话号码呼叫任何其他用户。...分析版本3.2.7.4.0211,它的WebRTC集成似乎同时包含两个BUG,并且应用程序在被叫方接受传入呼叫之前交换SDP提供和应答,因此我希望该BUG能够在没有用户交互的情况下起作用。

    2K53

    一次排查某某云上的redis读超时经历

    redis 提供了监控延迟的工具 开启延迟,设置延迟阀值 CONFIG SET latency-monitor-threshold 100 查阅延迟原因 latency latest 但是这个工具真正实践起来的效果并不能让我满意...,因为似乎他并不能把网络因素考虑其中,实践起来的效果它应该是只能将命令执行过程中可能导致延迟的原因分析出来,但是执行前以及执行后的命令生命周期的阶段并没有考虑进去。.../ Pretend it has not happened and retry. } netpollblock 不阻塞协程时,首先执行了netpollcheckerr,netpollcheckerr检查是否有超时情况发生...最终在1777232号包,客户端又一次发送了TCP Dup Ack 消息,催促服务端赶紧把丢掉的包发过来,不过这次服务端连回应都不回应了,最终触发了客户端应用层200ms的超时时间,调用close方法关闭了连接...看到现在,我有了充足的理由相信,是云服务提供商那边的问题,中间由于网络丢包的原因,且延迟较大导致了redis的读超时。拿着这些证据也说服了他们,并最终圆满解决。 提工单,云服务商的排查支持

    61431

    Python 为什么要保留显式的 self ?

    也许更糟糕的是(如 Bruce 所述),当正确地声明了方法,但是在调用时的参数数量不对,这时收到的错误消息。...,但是我宁愿去解决此错误消息,而不是修改语言。...对于在把方法插入类之前就创建的那些 C 的实例,它甚至也适用。 我想 Bruce 并不特别在意前述的等效性。我同意这只是理论上的重要。我能想到的唯一例外是旧式的调用超级方法的习语(idiom)。...但是,这个习语很容易出错(正是由于需要显式地传递"self"的原因),这就是为什么在 Python 3000中,我建议在所有情况下都使用"super()"的原因。...Bruce 可能会想到一种使第二个等效例子起作用的方法——在某些情况下,这种等效性真的很重要。

    37630

    Python 为什么要保留显式的 self ?

    也许更糟糕的是(如 Bruce 所述),当正确地声明了方法,但是在调用时的参数数量不对,这时收到的错误消息。...,但是我宁愿去解决此错误消息,而不是修改语言。...对于在把方法插入类之前就创建的那些 C 的实例,它甚至也适用。 我想 Bruce 并不特别在意前述的等效性。我同意这只是理论上的重要。我能想到的唯一例外是旧式的调用超级方法的习语(idiom)。...但是,这个习语很容易出错(正是由于需要显式地传递"self"的原因),这就是为什么在 Python 3000中,我建议在所有情况下都使用"super()"的原因。...Bruce 可能会想到一种使第二个等效例子起作用的方法——在某些情况下,这种等效性真的很重要。

    61730

    安全编码实践之三:身份验证和会话管理防御

    像WannaCry和Petya勒索软件这样的网络攻击在几个遭受其原因的人心目中是相当新鲜的。 研究人员仍然可以在网络应用程序和其他领域中发现另一个非常严重的错误。...所以我们继续篡改uid以检查我们是否可以访问其他人的帐户。 ? 修改cookie 要捕获cookie的值,我们使用浏览器中存在的Cookie Manager扩展,然后传递请求。...用户不存在 上面的图像是我们在具有特定用户名的用户不存在时收到的请求和响应。我们在转发器中发送了请求查询以检查响应。 ? 用户确实存在 上面的图像是我们收到的用户确实存在的条件的请求和响应。...我们在转发器中发送了请求查询以检查响应,并在此次获得了不同的响应。这给了我们一个想法,我们可以根据我们收到的响应来枚举用户。 ?...正如在这次攻击中我们可以清楚地看到,由于响应中的信息太多,我们可以弄清楚哪些用户具有相应的用户名,哪些用户没有。我们需要制作一些标准化的消息,以便攻击者不能仅仅使用一些简单的枚举技术。

    1.6K30

    Redis集群工作原理解析

    当客户端向节点发送GET/SET指令时,收到指令的节点会先对指令操作的key进行计算,得出该key值应该存储在哪个槽中,并检查这个槽是否指派给了自己。...针对节点下线有两种状态: 1.主观下线:当节点A想节点B发送了一条PING消息时,节点B没有在规定的时间内(设置的cluster-node-timeout参数)返回PONG消息,那么节点A会将节点B标记为主观下线状态...这里的主观下线只是节点A主观的认为节点B下线了,有可能是因为节点A和节点B之间的网络断了,但是其他节点依然可以和节点B通讯,所以主观下线并不一定是节点B真的就下线了。...2.客观下线:由于节点A与集群内的其他节点仍然保持通讯,因此节点B的下线消息也通过Gossip协议传遍了集群内的其他节点。...当集群内半数以上的节点都认为节点B主观下线了,那么节点B就会被认为客观下线了,同时将节点B标记为客观下线的节点会向集群中发送一条FAIL消息,所有收到这条消息的节点会立即将节点B标记为客观下线。

    56320
    领券