以生物信息学家的身份对待WebDev:为什么这么难?

2020-05-07 20:01:04

背景信息:我是一名生物信息学工程师,我正在构建CodeStories。我曾经说过我是一名科学家,尽管在获得生物信息学博士学位后,作为SWE在谷歌实习,现在作为一名全职工程师工作,“科学家”一词不再像以前那样准确了。无论如何,我95%以上的编程经验都是Python的科学工作。我当然不是网页开发人员。然而,我确实喜欢网络的想法。编写世界上任何有互联网连接的人都可以立即访问的软件仍然让我感到惊讶。

问题是我发现web开发既烦人又困难。还有更多层次的复杂性。调试比较困难。解决问题的“正确”方式,或选择“正确”的框架,每年都在变化。当你像我一样艺术落后的时候,UI总是一个挑战。

我以前写过上面的段落。但过去的几周让我想起了他们,因为事态的发展特别令人沮丧。这里只是我一直在解决的几个问题。

我是从一位访客那里得到这条评论的。我与最初的恼怒反应作了斗争。他没有错。

为什么URL里有这么多数据?我在接下来的帖子里会用到一个常见的口头禅,“我不知道”。我对网络编程最大的不满之一是需要倒下的兔子洞的数量。只是时间不够。例如,这里的url是由django-allauth生成的,django-allauth是一个非常漂亮的插件,可以帮助管理用户帐户。我不知道他们决定序列化哪些数据。

url1234子域名是怎么回事?这个更容易理解。我正在使用SendGrid为我发送电子邮件。在设置我的帐户时,他们问我是否需要自定义子域名。我拒绝了,假设这意味着电子邮件将从@mycodestories.com发送。这是对@email.mycodestories.com的一次相当简单的更新,但如果能有一些提示符为我所做的决定提供更多的背景信息,那就太好了。

http真的不应该是https吗?在这件事上,我最终提交了一个问题请求帮助。维护人员非常亲切,乐于助人。但是,再说一次,复杂性是压倒性的。在这一条评论中,这里列出了一些您从未接触过的生物信息学家术语:[";X-Forward-Proto&34;,";Proxying";,";Requests";,";TLS Connection";,";HTTP";,";Loopback/localhost";,";白名单代理服务器";,";枪。,";Apache/httpd";,";HAProxy";,";Django";,";SecuritySSL_Redirect";,";SecurityMiddleware";,";适配器";,";URI";]。在过去的几年里,我逐渐理解了这些概念和技术中的一些,但肯定不是全部。

最重要的是,用户偶尔会单击验证链接,并从Chrome获得Net::ERR_CERT_COMMON_NAME_INVALID以及以下帮助消息:

该网站发回了不寻常且不正确的凭据。当攻击者试图冒充url1234.mycodestories.com,或者Wi-Fi登录屏幕中断连接时,可能会发生这种情况。您的信息仍然安全,因为Google Chrome在交换任何数据之前停止了连接。

收取费用是网络上最常见的活动之一。看起来应该非常简单。从我读到的内容来看,Strip以其高质量的API而出名。我很兴奋花了一个晚上的时间进行支付,并在能够与付费客户签约时按下了开关。一周后,…。我觉得条纹的API很漂亮。但他们的文档还有令人惊讶的不足之处。问题的一部分是条纹使用的是v3。他们的医生没有跟上。

我开始尝试按照这个指南构建一个接受信用卡的表单。他们的内联代码示例故意不完整,这很好,因为他们在Github上有一个完整的示例。问题是(也许我错过了一些简单的和解),这两者并不匹配。这个差异是我没有跟进的另一个例子。当我翻阅文档页面试图找出在构建表单时我做错了什么时,我遇到了Strive Checkout。小心!。不要将本页与上一页混淆,上一页的标题也是“接受付款”。

我决定放弃自己制作表单,转而使用Checkout。我犯了一个错误,试图遵循一个非官方的教程,准确地说明如何将Checkout集成到Django中。这是一本写得很好的指南,但事情还是不太顺利。最终我意识到这本指南已经有几年的历史了,因此已经过时了。谢天谢地,我找到了一个非常有用的Strip页面,他们的迁移指南。将过时的教程说明映射到新标准非常容易。

回想起来,很明显,设置Checkout意味着您只完成了一半。迁移页面很好地将我带到了“付款后”,这是另一个页面,在那里我可以学习如何在付款成功时设置和响应网络挂钩。再说一次,这些文档几乎是有效的。在此页上,说明告诉您通过以下方式创建事件:

只是那对我不起作用。在花了一大堆时间试图找出我做错了什么之后,我看到了一个单独但非常相似的页面,上面说我应该这样构建我的活动:

根据我的经验,一旦您使用过一次或两次像Strip这样的系统,所有这些错误和错误似乎都是微不足道的。作为一个初学者,所有这些障碍最终都会使事情变得比原来困难5-10倍。在这种情况下,我最终花了大约一周的时间来完全整合和测试支付。

我已经推出了几个CodeStories的软发布,但因为我没有设置Strike,我有大约40个人在等待名单上,没有付费客户。在我完成付款设置后,我给等候名单上的每个人发了电子邮件,让他们知道注册正在开放。我的第一个潜在客户联系我提出了一个问题,我回答了他,他说这听起来很棒,然后他去注册了。不过,他不能登录他的账户…。当我检查我的帐户时,我也不能…

在工作中,我们有时会使用一种名为“五个为什么”的技术进行尸检。基本上,您反复询问为什么会出现问题,并将其作为一种查明问题真相的技术。我们来玩吧。

为什么我无法登录?因为在等待了一段时间后,Guricorn系统退出,dyno重新启动。

为什么Gingicorn要执行SystemExit?Django-allauth登录功能内部的某些东西超时了。

为什么Django-Alauth超时了?它试图连接到redis,但它无法这样做,并且没有很好地处理该错误。

为什么Django-Alauth不能连接到Redis?按照建议,我有一个指向URI的config var redis_URL。我的与我在Heroku上打开Redis管理页面时看到的不同。重要的是,我已经启动并运行这个环境一年多了,从来没有遇到过使用redis或登录的问题。虽然我一直在做很多条纹集成的注册测试,但我一直在重复创建新账户,然后在注册后立即删除它们,而不是重新登录。

我最好的猜测是,这与来自Heroku的关于Redis凭据的警告有关:

请注意,这些凭据不是永久性的。Heroku定期轮换凭据并更新连接此数据存储区的应用程序。

我花了连续4个小时的调试时间才弄清楚这件事。当我做完的时候,我的客户已经走了,从那以后我就再也没有他的消息了。

这篇帖子是故意不加修饰的。为什么?因为我想回去编程。在个人层面上,克服这些问题的唯一方法是更多地了解我正在使用的工具。而学习的唯一方法就是坚持练习。

然而,更广泛地说,我写这篇文章是为了呼吁所有建立网络的人。请注意那些知道的比你少的人。说起来容易做起来难,而且很容易忘记。我自己在这方面经常失败。这就是为什么不断提醒是值得的。构建web工具和文档,允许像我这样不是web开发人员的人为根本不是开发人员的人构建CodeStories之类的工具。

明天可能会感觉不同,但今天感觉我们在过去的40年里成功地建立了比生物学在40亿年的进化过程中能够管理的系统更复杂的系统。