为个人利益而编程
免责声明 :这篇文章并不旨在关注与编程有关的任何道德方面。 它的目的不是教育性的,也不是鼓舞性的。 这仅仅是一个示例性的故事,说明编程如何成为简化日常生活的有用技能,以及对我的工作表示感谢。
在我获得学士学位的大学中,内部网络系统存在相当多的性能问题,这些问题在课程注册期间达到顶峰。 在每个学期开始时,学生会提早起床并尝试登录注册系统。 由于系统无法一次处理所有学生,因此只有一部分幸运的学生可以登录并注册他们的课程。
对于普通学生来说,情况是他们想要登录的课程在他们能够登录时就已经满了。这之所以发生,主要是因为课程的能力非常有限,不允许该学生参加当天因为他们的专业学位而去的课程,或者已经参加过该课程的人都在为尚未登录的朋友们保留一个位置。 只有当登录尝试次数减少时,系统才能按预期运行。
对于大多数注册系统表现不佳的学校来说,这可能是一个标准问题。 但是,问题在于,无法注册课程会妨碍尝试注册更高级别课程的学生,甚至更糟的是试图毕业的学生。 这些人最终不得不参加暑期课程,或者至少将其任期再延长一次。
几天前的几天,我收到了姐姐的信息,姐姐是同一所大学的新生。 她告诉我,一个学生创建了一个应用程序,该应用程序可以跟踪该课程有多少个可用位置,并向希望发送任何空缺通知的学生发送电子邮件。 它不能解决无法登录的问题。但是,在实践中,将立即将可用的地点通知给人们,并可能注册他们的课程,使他们能够按时完成学业。 为此,开发人员所需要的只是课程注册号列表以及学生的电子邮件地址。
对于您的同学来说,当然是一件很不错的事情。
…
对? aa 。
显然,他为每个学生要修的课程索取50土耳其里拉(截至撰写本文时,为50 TRY约合10美元)。 例如,如果学生想学习心理学课程,数学课程和应用数学部分的座位,而这是数学课程的必备条件,则他需要向开发者支付30美元,这是在目前的土耳其经济中,可观的钱。
更糟糕的是,不能保证在那个过程中会有空缺。 如果没有人放弃课程,那么运气不好。 ¯\ _(ツ)_ /¯
尽管我尊重创建应用程序所花费的时间和精力,以及决定将其作为一项有利可图的服务来提供的服务,但我仍然认为,每门课程收取10美元的费用无非是剥削了那些除了付费以外没有其他选择的人该费用只是为了能够注册某些课程。
不用说,当我姐姐问我是否可以帮助她向开发人员支付3门以上课程的费用时,我感到非常恼火。 星期六晚上我很平静; 我想我会看一下如何构建这样的应用程序:真的有多难?
我需要研究几个关键事项:
1)了解如何从课程注册网站获取课程座位信息
2)能够定期(即每x分钟)检查可用性信息
3)向学生发送有关课程可用性的信息丰富的电子邮件
由于我在学士学位期间使用相同的注册系统已有几年,因此我已经知道在哪里可以找到所需的信息:课程的总容量,已经注册的人数以及剩余的可用座位数。 在跳了几个链接之后,事实证明它可以通过简单的Web抓取来管理。
对此的唯一挑战是调查课程页面的HTML布局。 在弄脏了一段时间之后,我能够使用Node.js以及npm软件包cheerio和request-promise来刮擦必要的信息。 这个过程有点丑陋,但是由于蜘蛛侠特许经营权的这些明智话语,我才能够发挥出自己的实力,然后屈服于冒名顶替综合症:
糟糕的HTML伴随着糟糕的文档查询。
本·帕克
收到必要的信息后,我必须确保可以定期处理它。 注册需求量大的课程是一场争分夺秒的竞赛,因此我们越频繁地检查是否有空缺,就越好。
在Google上快速搜索到的我该如何做的想法使我想到了一项计划工作 。 简而言之,它是一个实用程序,用于计划所需的命令以特定的时间/间隔运行。 我将在文章末尾列出一些资源,以帮助了解有关cron作业和美味佳肴的更多信息,以编写运行它们的命令。
要将脚本添加为cron作业,请在我的Ubuntu终端中运行
crontab -e
…并且我添加了以下几行,以便脚本每分钟运行一次(请注意,#用于注释一行)
# Uncomment the line below before registration starts, so the script can run every minute
# */1 * * * * node ~/Desktop/Code/robin/crawl.js
crawl.js脚本基本上会加载CRN列表以及要通知的电子邮件地址。
检索相应课程的网站后,将存储总座位数,已用座位数和可用座位数,以进行进一步比较。 在下一分钟,脚本将检查与前一分钟是否存在任何差异。 如果没有任何变化,则不会通知学生(或向其发送垃圾邮件)。
我必须采取的最后一步是查看如何从节点脚本发送电子邮件。 我以前曾接触过node-mailer ,因此创建了一个Gmail帐户来发送电子邮件后,我继续使用该软件包,如其文档所示。
加上简单的缓存机制,以便仅在检查的最后一分钟有实际更改时才发送电子邮件,整个过程大约花了我4-5个小时。
星期一早上,真相的时刻到了。 我要求在课程注册期的正式开始时间之前提供电子邮件地址和课程注册号的列表。 开始前一分钟,我取消了启动定期检查的路线的注释。
到第二天,由于电子邮件通知,我姐姐得以注册5门课程,这使她不仅可以注册成为其专业学位的核心先决条件的课程,还可以根据自己的喜好更改时间表。 基于这次成功的执行,我感到有进一步的动力去进行此应用程序的下一步,即将它公开并免费与学生共享。
这是我真正喜欢成为软件开发人员的一部分。 我遇到了我认为有问题的东西,或者可以更好地处理。 我做了一些研究,将一些非常基础的东西放在一起,然后观察它的工作。
在短短3年的专业经验中,我发现有机会从事很多玩具项目,同时还从事全职工作。 就像这个故事一样,我处理的大多数玩具项目都是出于当下的需要。 他们中的大多数甚至都没有太过挑战。 一切都归结为进行研究,并一路努力学习良好做法。
通过构建这些项目,我学会了不同的技术和设计模式,但是我最欣赏的质量就是深入研究并提出更好的问题。 这是否使我成为一个更好的软件开发人员还是有争议的,但是我觉得这些素质会影响我的日常生活。
我喜欢这样的事实,我可以出于好奇或只是为了娱乐而练习我的手工艺品,并为我或他人带来积极的价值。
我喜欢失败了。 我的失败主要是因为我越失败,我做的越少。
我热爱好奇,可以激发我的决心,也可以以此为生。
这些和许多其他激励因素帮助我自信地鼓励人们开始编程。
我喜欢我的工作。
感谢您阅读我的(第一篇)文章!
如所承诺的,下面是我在探究cron时发现有用的一些链接。
https://cron-job.org/cn/ 一种用于免费执行cron作业执行的服务
在 这里 可以找到一篇很好的文章,以了解有关该概念的更多信息 。
https://crontab.guru/ 一个帮助可视化cron命令输出的网站
From: https://hackernoon.com/programming-for-personal-benefits-662f8469f430