大家很少会看到人们(包括我自己!)公开谈论他们犯过的错误。但我觉得我们最好时不时反思一下自己过去犯过哪些错误,这样我们就不会在未来重蹈覆辙了。 我成为专业程序员已经有大约五年时间了。...有一段时间,这东西确实奏效了。但我还是希望自己一开始就能使用合适的 ORM(例如 NHibernate)来完成这项工作。至少当我的用户数量不断增长时,我就用不着再担心改变数据库供应商的事情了。...我曾花了很多时间来给我的代码编写文档(还是 XML 文档,还记得吗?),结果只是发现每当我更改代码时都需要更新文档才行。...5没有自动构建 应用程序部署和打包工作相对来说比编写代码更容易一些,所以我把这两件事情放在了很低的优先级上。很快,我就收到了所有人的抱怨,他们都说构建无法正常工作。“缺少先决条件,如何解决这个问题?”...想象一下,如果你的方法只在应用程序启动并运行 45 分钟后才会被调用,你是否要等待 45 分钟才能到达这个点上,然后才开始调试呢? 更好的办法是将应用程序分解为一些可以独立调用的子模块。
所以让我们假设目标是test.com 当我开始搜索程序时,我发现管理面板 UI 绕过 目标使用JSON Web Token (JWT)作为身份验证机制,我花了一些时间来理解,试图在使用 JSON Web...当您登录主网站时,将为普通用户生成test.com一个JSON Web Token (JWT) 现在在我知道目标是如何工作的之后,我开始进行侦察。...我立即报告了这个错误,但这是错误赏金计划的预期响应: 厂商:我们与开发人员讨论了这个问题,他们说你可以访问的管理仪表板只是一个在客户端呈现的反应应用程序(那种只需要呈现公共信息的页面),自从实际的 API...但这是不可能的,我需要找到 0day 和 JWT 机制,任何使用JSON Web Token (JWT) 的网站都会受到攻击。...我尝试使用 ffuf 对所有子域进行内容发现,试图找到类似 admin.test.com/uploads/poc.txt 的内容 但我什么也没找到,我开始查看我的打嗝历史并阅读回复,我发现了这个 href
在 iOS 15 公开推出后, 我们开始从用户端收到反馈报告:在打开我们的应用程序(Cookpad) 时他们被莫名其妙的反复退出到登录页。...我试着重新安装应用程序,我试着在有网络连接和没有网络连接的情况下启动,我试着强制退出,经过30分钟的努力,我放弃了,我开始回复用户说我没找到具体问题。...1、UserDefaults 中的数据被清除。 2、一个意外的API调用返回HTTP 401并触发退出登录。 3、Keychain 抛出了一个错误。...虽然我们无法改变加载会话的行为,但我们能够开始记录错误并更好地记录我们实现的当前行为。 这个结果给了我们一些很好的观察点,然后我们可以在接下来的几周内观察。...直到我看了所有这些步骤的时间,事情才开始变得有点意义。
花了很大的勇气(说服我的父母)离开我的大学,经过三年的研究,接受在里斯本的工作,不知道任何人或语言,但它是一个美妙的经验,帮助我找到自己。...编码是美妙的 我花了几年时间试图了解我成年时想做什么,结果我没有得到答案,我花了一个学期在医学院学习,当我意识到自己一点也不关心当医生,我参加了三年的工程课程,但我不喜欢我的专业科目,最后我决定不想继续...人们常常会忘记,当他们只是初学者的时候,编码其实对他们来说是多么地困难,你需要投入足够的时间,然而却只能取得一点点进步,这就是学习,一开始都会很慢。...如果我还是十九岁,我无疑会上大学学习计算机科学,特别是在我的国家意大利,那里的教育很便宜,进入这个行业最简单的方法肯定是获得学位,然而获得几个公司的实习机会。...如何从零开始 有许多知识需要学习,有很多语言需要掌握,有很多基础需要打牢,如果我做出了错误的选择呢?
以下是一位移动应用程序开发人员对Flutter热重载的评价: 我想测试热重载,所以我改变了颜色,保存修改,结果……就喜欢上它了! 这个功能真的很棒。...当我部署代码并花费很长时间时,我分心了,做了其他事情,当我回到模拟器/设备时,我就忘了想测试的内容。有什么比花5分钟将控件移动2px更令人沮丧?有了Flutter,这不再存在。...竞态条件具有双重不利,因为它可能会导致严重的错误,包括应用程序崩溃并导致数据丢失,而且由于它取决于独立线程的时序,所以它特别难以找到并修复。在调试器中运行应用程序时,竞态条件常常消失不见。...不必切换到设计模式,选择鼠标并开始点击,然后想是否有些东西必须通过编程来完成,如何实现等等。因为一切都是程序化的。而且这些API设计得非常好。它很直观,并且比自动布局XML更强大。...Flutter使用由Google创建的Dart语言,老实说,我不喜欢C#或JAVA这样的强类型语言,但我不知道Dart编写代码的方式有什么与众不同。但我觉得写起来很舒服。
众所周知,软件项目非常容易超支,所以我们协商签订了一份固定价格的合同,并对所有出现的 bug 都“保修”。花了很长一段时间后,我们才敲定合同细节,并在合同里详细描述他们应该构建的每个功能。...这里,我们犯下了致命错误! 根据合同协议,这个项目分为三个部分。在完成任何工作之前,我们就要预付 40% 的费用。然后每一部分开发完成时分别再付 30%,但是在我们收到刚完成部分的交付成果之前。...如果我自己没有发现这个问题,开发公司肯定不会安排任何渗透测试人员来发现这些安全问题。 这样的错误令人无法容忍。更令人震惊的是,他们非但没有为自己的严重疏忽而道歉,还不愿意更改。...这样,他们就可以使用这几个端点立即开始开发比较简单的特性。当他们完成这些功能时,用于下一批特性的 API 也就完成了。 我们的目标是避免延期,同时开展这两项工作,可以更快地推出我们的 App。...取而代之,他们坚持让我们用电子邮件给他们发送一个 Word 文档,包含所有在 Swagger 中能找到的内容,但要按照他们指定的格式填写。 我们花了好几天讨论这个问题,最后他们让步了。
Flutter虽然真香,但目前社区显然还是很不健全,像微信SDK、支付宝等第三方SDK都无法在Flutter项目上直接使用。想要使用这些SDK就曲线救国了。...com.jarvanmo/fluwx是MethodChannel的名字,flutter通过一个具体的名字能才够在对应平台上找到对应的MethodChannel,从而实现flutter与平台的交互。...,当我们遇到了一些异常需要回调给Flutter时,这个方法就很有用了。...nil : tagName]; 原生如何调用Flutter 当我们完成分享时,我们可能需要将分享结果传回Flutter。...但微信的这些回调是异步的,我们也不能够长期持有Result对象,所以这个时候我们要在原生中调用Flutter。
但不可否认,每一家企业都会遭遇系统故障。而且,我们距离让在线系统像电力等即开即用的传统设施一样触手可及还有很长的路要走。...不只是当前视图,是整个应用程序都陷入瘫痪。我重装了一下,但还是不行。我望了望四周,同事们显然也遇到了问题。虽然用户还没有发出投诉,但我们必须赶快行动。...我们在几项关键 API 调用中发现了一些错误,但解决之后,应用仍然无法加载。更要命的是,为什么只有公司内部员工遇到了无法加载的问题?事实证明,该 API 会为内部用户返回一些额外的数据。...而过去几周之内,这些额外数据一直在缓慢增长,最终在当天下午超过了请求的最大有效载荷。...我们收到的所有支持通知,都提到 v1 代理将不再将日志发送至我们的接收端点;但我们的 v2 代理及其他基于 REST API 的现代客户端实现都能够正常工作。
我们面临的问题是,当我们构建一个新版本时,与旧版本集成的客户端如果不与新版本重新集成,就不会收到这些更新。有时,新版本中的文档或参数会发生更改。...字段和方法级检测:我们有内部检测工具,可以显示端点花费的时间和使用的参数,但是很难找到使用的字段。如果没有这些信息,我们就无法知道某个字段是否可以安全删除,或者是否仍在使用。...使用 GraphQL,我们可以获得字段级的检测,并清楚了解哪个解析器花了多长时间、常见错误以及调用了哪些字段。这个字段级检测有助于智能地弃用不再使用的字段。...它提供了一种干净的开发人员体验,并提高了代码的可测试性。 API 探索:我们花了很长时间浏览 API 文档,并弄清楚特定字段使用哪个端点。...4 我们如何扩大 GraphQL 的采用范围? 当我们开始扩大 GraphQL 的采用范围时,我们意识到每个应用程序都在试图解决自己的 GraphQL 问题。
我喜欢一个具有多元化权限的会议——例如,不仅仅是专注于单一技术。而我真正喜欢做的是听取我的专家的意见。有时这些人是为我工作的人,负责运行安全或应用程序开发或基础设施。...你正在关闭这个不再具有战略意义的领域的开发。也许时间已经过去了,但您仍然可以在上面使用它。 当您谈论“数据的力量与个人崇拜”时,您是什么意思?...尤其是像我一样坐在“大椅子”上,你说话的声音很大,有时会无意中响亮。在我收到请求后,我听到有人说“尼尔想要这个”的次数,我不知道我想要那个,但有人可能会在谈话中指出某事。...然后我有很长一段时间的学术生涯。我在斯坦福教授高级数据库设计。我并没有忘记这一切!有时这对组织中的人来说是一个令人惊讶的事实。 你是大学辩手和美国全国冠军。...您将学习如何快速发现问题,找出重要的和不重要的,并开始过滤和解决这些问题。 第二件事是,我认为这非常重要,每一轮你都会在肯定和否定之间切换,支持一个话题或反对一个话题。你总是会采取双方。
另外,不要进行不必要的API接口调用,要使你的全栈应用程序以尽可能少的请求完成你需要的全部功能。以及测试……我在这上面犯了很多错,没有做足够的测试。...就我所知,单元测试有助于搭建更健全的应用程序,避免潜在问题,节约时间和开销。但我就是很讨厌它,这可能是我最坏的习惯之一,也是我成为更好的开发人员需要解决的大问题。...当你犯下大错,请你仔细思考一下这三件事,很有可能就不会再犯这个错误了,或者你至少下次会尽早发现错误,避免情况恶化。同时,不要因为犯错而对自己太苛刻,谁都会犯错。 八、太早放弃 挫折是编程的重要环节。...你可能开始觉得自己处理不了,自己本可以去做别的,做这个就是浪费时间浪费生命浪费金钱……你开始产生很多消极的想法。...所以在放弃之前,确保你试尽了所有可能:已经上下求索、寻求帮助、用遍方法、换个技术、休息很长一段时间让自己的思绪恢复正常、如果可能的话已经搁置了一段时间……你在放弃之前做了所有能做的事情,如果还是失败,那么也许是时候放弃它
无论您是编写 Node 还是任何其他 JS 框架,都有一个使用热重载的设置。Go 也提供了热重载(本博客使用了该特性) 另一个例子是谷歌的 Flutter 架构,从一开始就设计用于热重载。...如果您与从事 Flutter 工作的工程师交谈,你会发现他们最喜欢 Flutter 开发者体验的一点就是能够实时编写他们的应用程序。当我为《纽约时报》写了一个拼字游戏时,我很喜欢它。...Inject 这个小型库是完全通用的,无论您使用 UIKit、 AppKit 还是 SwiftUI,您都可以使用它。 您无需为生产应用程序添加条件或删除 Inject 代码。...注入现在允许你更改 PaneAView 中的任何东西,除了它的初始化API。这些变化将立即反映在你的应用程序中。 ---- 一个更具体的例子?...当我最初开始咨询 TBC 时,我想要的第一件事是将 Inject 和 XcodeInjection 集成到我们的工作流程中。公司管理层非常支持。
在这些工作经历中,有一个话题一直没有得到应有的关注:迭代时间。原本我打算写一篇关于构建时间的文章,但我认为,迭代时间的视角能够更准确地切中要害。...现在需要将应用程序打包部署到我所使用的平台上。当我首次打开 PS Vita、任天堂 3DS 和任天堂 Wii 时,要等 30 秒钟左右,游戏才可以在主机上运行。...实际情况是,在不到一秒钟内编译 (和运行) 测试,我现在可以持续关注这一个任务。编译和逻辑错误在所难免。但当我能够快速发现错误并重新编译时,就进入了一种流畅的状态。...我花了很多时间去弄清楚一些东西应该如何工作,这些都被编入了测试规格说明书中。 结 语 在很多方面,我都很感激自己在电子艺界的那段时光。...我多次看到长期工程计划生根发芽带来了真正的日常收益,而这就是其中的一次。 在某些时候,有人会站出来说:“测试这些变更需要很长时间,有没有更好的方法?”这个问题我们每天都应该问问自己。
这个过程的每一步都揭示出我需要学习更多的东西。在过去的2-3年时间里,我成长地最快,无论是作为一个个人还是作为软件工程师都是如此。 我是如何准备面试的?...例如,你如何从头开始重新开发Instagram?(我在Facebook面试时曾被问到这个问题)。我的专业背景是API设计和服务导向式架构。...我一开始讲的是我想在我自己的Instagram版本中加入的一些功能:赞、上传照片和简单的时间线。功能范围使我能够构建一个非常可靠的API,因为我非常了解这些场景。...面试官迟到了,他花了几分钟时间在我浏览了一下我的简历,然后开始在白板上画一些API。他简短地描述了他期望API做什么,并问我该如何解决这个问题。...我们阐明了API的特性,然后我开始使用白板描述我的解决方案,大概5分钟后,我转过头发现他竟然睡着了。这次面试体验太糟糕了。我在一项调研问卷中向招聘人员反馈了这个问题,但是没有收到任何回复。
有人花了整整两天的时间改好了代码,但为什么我们回头去看的时候会觉得这些改动如此简单? 因为问题报告对如何再现的描述非常模糊。 我花了好几个小时才成功地重现了问题。...我知道报告错误非常困难,我非常感谢那些报告错误的人。我会尽可能利用已有信息,实在没办法再去请求报告错误的人提供更多信息,目的是为了表达对他们的感谢。...因为报告的问题与某个功能有关,但我不熟悉这个功能。 我很少使用与这个问题相关的功能,而且我并没有接触过与该功能相关的具体细节。...因此,我花费了很长时间来理解如何使用这个功能,以及这个bug与软件交互的具体过程。 因为我花了很长时间调查引发问题的真正原因,而不仅仅是流于表面。...问:有什么是比改bug更糟糕的工作呢? 答:反复修复同一个bug。 我愿意花时间确保每次遇到的bug都会被完全修复,这样我就无需再面对这个bug,也无需再花时间调查、修复并测试这个bug。
0x00:介绍 最近,当我正在进行侦察时,我遇到了一个Atlassian Crowd应用程序。...在搜索了一下之后,我找不到任何针对该漏洞的概念验证,因此我决定对其进行分析并尝试创建一个。 0x01:分析 我开始克隆插件的源代码,可以在这里找到。...如果它包含多部分内容,它将调用extractJar()方法来提取请求中发送的jar,否则它将调用该buildJarFromFiles()方法并尝试从请求中的数据构建插件jar文件。...应用程序将尝试使用该pluginInstaller.install()方法安装插件,并将捕获该过程中的任何错误。如果没有错误,服务器将以200 OK响应,并显示插件已成功安装的消息。...由于items变量为空,因此它会跳过for循环并返回tmp设置为null 的循环。 我花了很长时间试图弄清楚为什么会这样,我不确切知道它的根本原因,但我所关心的只是获得RCE。
在本文中,我想和大家分享一下我们从头开始构建 https://cleanbee.syzygy-ai.com/ 的经验——我们如何根据需求塑造流程,以及当我们用新组件扩展我们的技术栈时,我们的流程是如何演变的...我坚信,像往常一样,这一切都取决于团队的成熟度,你正在构建的软件种类,以及各种业务限制,例如,是否存在错误的预算和上市时间与 SLX 的重要性。 我认为,重要的是制定一套大家都认可和遵守的共识程序。...API 契约是一件很棒的事情,但是当真实服务器抛出 “模式验证错误” 或因 HTTP 500 错误代码而惨遭失败时,会更明显地出现问题。 后端服务最初分为两组——API 单体、搜索和推荐。...我必须说,我们还有很长的路要走。 只要你搜索这种解决方案,你会发现第一件事就是 ELK 栈和一堆付费提供商。在权衡了维护我们自己的设置所需的时间和精力后,我开始思考付费解决方案可能是值得的。...Firebase Test Lab 支持 Flutter 集成测试,尽管它需要进行一些调整,以允许从他们的 IP 范围(有运行模拟器的虚拟机)的请求到达我们的 E2E API。
“抄录”所有信件: 当该应用程序尝试与外部服务器通信时,所有的数据请求都会先经过 WPE 这个“路障”。WPE 会完整地“抄录”(记录)下这些请求的内容,包括请求的网址、方法、携带的参数等。...“抄录”所有回信: 同样,当外部服务器返回数据时,这些数据包也会先经过 WPE,被完整记录后,再转发给应用程序。...在 WPE 的记录列表中,你能否找到那个对应“刷新”动作的网络请求?如果找不到,说明问题可能出在客户端的逻辑,按钮点击后根本没有触发网络请求。请求参数是否正确?...通过分析这些时间戳,你可以进行初步的性能诊断:一个请求从发出到收到响应,总共花了多长时间?页面加载时,是哪一个 API 请求特别慢,拖慢了整体速度?...这是一种超越框架和语言的硬核能力。提升跨团队协作效率: 当你能够清晰地指出“是客户端的这个请求参数错了”,而不是模糊地说“我这边功能不正常”时,你在与后端、运维的协作中将拥有绝对的话语权。
本系列可能会伴随大家很长时间,这里我会从0开始搭建一个「网易云音乐」的APP出来。 下面是该APP 功能的思维导图: ?...这周开始恢复代码与文章的更新,最近收到很多童鞋反馈说比较卡, 我建议加我个人微信「17610912320」,来探讨一下是哪个地方,具体在哪里卡。 也欢迎 PR,让我们一起为这个项目添砖加瓦! 1....热搜榜 热搜榜这个就更简单了,直接就是一个 ListView。 刚开始看到这个布局的时候想到的是 ListTile,但是间距什么的不好控制,所以只能自己写了。...底部播放控制栏 接到很多人反馈说找不到当前听的是哪首歌?, 当时觉得这个东西比较简单,就没有写,昨天花了一点时间给写完了。 我为什么说他简单呢。。。不是我装x,是真的简单,听我说!...}else { model.togglePlay(); } } ) 当我们重新打开APP的时候,这个时候 curState 是 null,这个时候我们调用 恢复/暂停 方法是没有效果的