哈Ha 我们自发举行了第一次内部黑客马拉松。 我决定与您分享我在两周内为它准备的痛苦和结论,以及所完成的项目。

对营销感兴趣的人无聊的部分
我将从一个小故事开始。
四月初。 第一个黑客马拉松MskDotNet社区在我们的办公室举行。 这次,在我们的银河系中,争夺Tatooine的战斗如火如荼。 周六 20支球队。 披萨 一切都非常真诚(
证明 )。 充气R2-D2笼罩在大厅周围。 团队编写最正确的算法,以通过地图上最危险的比赛。 我们改变了第一场比赛的开始。 节省饼干和咖啡。 组织者和我希望星期六能有很多人在晚餐后离开。 但是没有 落后12小时的编码。 结局。 某些东西掉了下来,有些东西没有开始。 但是每个人都很高兴。 我们的团队获胜。 我们倍加高兴。
我对Slack感到高兴,然后这个想法浮现在脑海:“我们需要进行自己的黑客马拉松。” 我正在写信给我们的服务站Sasha。 沉默。
清晨 我在办公室喝咖啡。 我看到萨莎从后面来。 “丽莎,太好了! 我们的重要日期是4月21日。 开始吧!” WTF!? 这么快 ?? 什么啊 我需要在4月中旬飞往Syktyvkar进行实习。 是的,和他一起下地狱! 来吧
保持2周。 我从来不是黑客马拉松的唯一组织者。 让它成为内部。 我阅读了有关该主题的文章。 锡。 需要几个月的时间。 需要几个人。 有必要考虑一下商品,奖品,条件,时间表,兴趣,理解目的,预算。 甚至可能弄清楚生活的意义。 我肯定没有时间。 当您阅读和准备时,已经过去了一周。 现在该对文章打分并开始做某事了。
赶上我们为期1周的内部黑客马拉松清单- 计划 :静静地坐下来,写下您需要进行黑客马拉松的清单。 30分钟
- 目标 :参与者自己建议并选择要在Google表格中创建的项目。 后台任务2小时 。
- 日程安排 :考虑到3个休息时间和最后的休息时间,您会在膝盖上写下简短的故障记录。 20分钟
- 团队 :您在Slack / mail / etc的IT渠道中从服务站发布有关黑客马拉松的消息和时间表,并为黑客马拉松创建单独的渠道。 在其中,每个人都分成了小组,并不确定在黑客马拉松的前5分钟内这样做。 后台任务2小时 。
- 优点 :您想出一个由两名开发人员提供的商品,为设计人员提供渲染,并准备就绪。 后台任务,3天 。
- Hackathon :您到办公室来,一开始就协调所有事情,开展业务,阅读Reddit,告知每个休息时间有关新鲜的披萨,拍摄日落的照片,宣布决赛,一起投票并选择获胜者。 1天
- 在星号下 :当然,您一直认为一切进展顺利。 当然,并非所有人都会看到您的讯息,最好亲自与他人交谈。 当然,如果有人会帮助您,一切都会变得轻松2倍(美妙的Alena帮助了我)。
关于黑客马拉松日期的较无聊的部分
为什么是4月21日? 这一天对我们意义重大。 恰好在一年前,即4月21日,在联邦广告运动开始后的第一个周末,我们陷入了沉重的负担。 第二天,星期日,我们的团队从早上8点开始工作。 然后,我们在Trello创建了一个星期日黑客马拉松比赛委员会,开始了每天12小时的轮班工作。 情况如此危急,以至于我们什至没有时间吃饭,而且我们也被其他团队的人喂饱了。

您可以在
Fedor Ovchinnikov (我们的首席执行官)的
页面上阅读更详细的故事。 从那时起,我们发生了很大变化,但现在我们绝对不会忘记日期。
今年,我们决定以纪念后代的方式纪念这一事件的永生。按照最佳传统,我们组织了渡渡历史上首次进行了长达10个小时的内部黑客马拉松。
关于黑客马拉松项目最无聊的部分
免责声明:所有描述都是由伙计们自己编写的,因此本文的作者身份不是我的。OlegLörning(汽车lörning)
Dima Kochnev,Sasha Andronov(@alexandronov)他们想建立一个神经网络,无需任何知识即可确定照片中的披萨类型。 结果,他们制作了一个非常简单且具有玩具性的玩具-它可以识别10个比萨饼,弄清楚了所有工作原理,以及一天(约10个小时)有多少可能。

尤其是,我们意识到,该行业已经到了普通开发人员可以在无需深入了解该主题的情况下获取现成的库,阅读文档并训练其神经网络的地步。 并且它将足以解决实际问题。
使用的工具:
- imageai是使用机器学习和计算机视觉的便捷,简单的库。
- 尝试过两种模型-ResNet50,Yolo。
- 该代码当然是用python编写的。
我们有11,000张照片,但其中近3/4被证明是垃圾,其余照片则显示了不同且不合适的角度。 结果,我们选择了成品模型(该模型只知道如何找到披萨),并在其帮助下分离了最多的垃圾。 此外,照片的名称是披萨的名称-这就是我们将它们放在文件夹中的方式,但是事实证明,名称与现实不符,我们必须用手清理它。 结果,剩下大约500-600张照片,很明显这是微不足道的,但是,事实证明足以将10个匹萨分开。
为了训练网格,他们在NVIDIA Tesla K80上使用了Azure中最便宜的虚拟机。 它在100个时代进行了培训,但是很明显,由于存在一个很小的数据集,网络在50个时代之后就变得过饱和。
实际上-整个问题是缺乏好的数据。

我们可能在术语上有些混淆,但我们必须记住,我们通常没有处理所有这些问题的经验。
GUI for NOOBS(用于订购比萨饼的控制台)
Misha Kumachev( Ceridan ),Zhenya Bikkinin,Zhenya Vasiliev我们为极客提供了一个原型控制台应用程序,借助它,您可以通过终端或命令行订购披萨,甚至可以将其集成到部署管道中,并在成功发行后将披萨交付到办公室。

这项工作分为几个部分:我们整理了如何安排用于移动应用程序的API,如何使用
oclif组装了自己的CLI
,并设置了所组装软件包的发布。 最后一项任务与骇客马拉松快要结束的几分钟令人不快。 一切对我们本地都有效,甚至该软件包的旧发行版都可以使用,但是新版本(其中添加了更酷的功能和表情符号)拒绝使用。 我们花了40分钟来找出问题所在,但最后一切都神奇地起作用了。
我们最大的黑客马拉松计划是通过CLI向办公室真正下单。 我们在测试台上进行了十多次驾驶,但是当我在产品上得分时,我的手仍然颤抖。

结果-我们仍然做到了!

快递去
Anton Bruzhmelyov(作者),Vanya Zverev,Gleb Lesnikov( 熵 ),Andrey Sarafanov我们采用了“申请快递”的想法。
有关准备工作的背景。最初,我知道了,但是应用程序可以具有哪些功能? 这样的事情出现了:
- 该应用程序通过代码登录到结帐柜台。
- 该应用程序将立即显示您需要接受订单的可用订单。
- 快递员记下订单并开始旅行。
- 向他显示了估计的时间,他是否有时间。
- 客户显示快递员已经离开。
- 客户开始在地图上显示快递点和估计的时间。
- 快递员可以在应用程序的聊天中写信给客户端。
- 客户端可以写信使与应用程序聊天。
- 到达前五分钟,客户收到一条消息,说快递员已经关门,请准备好。
- 快递员在应用程序中记下了他停下来等待的时间。
- 快递员一键式地从应用程序中致电并报告(他上升,行走等)
- 客户接受订单并输入来自应用程序或SMS的PIN码以确认交货(作为签名),因此,如果他迟到,快递员将无法提前完成交货。
- 该订单在系统中标记为已交付。
加上一些替代方案:
- 快递员可以标记未送达的订单并选择原因。
- 快递员,如果您迟到,则可以通过SMS发出一键式电子证书。 如果不遵守交货时间,则证书会自动出现。
对这个项目的承诺感和需求感当然值得一提。
第二天,我们和团队一起吃了午餐,讨论了应用程序最小功能的外观。
结果,形成了以下关于黑客马拉松必须要做的事情的清单:
- 登录到收银台。
- 显示当前位置。
- 将数据发送到外部api(坐标,接受订单,下达订单)。
- 从外部api获取数据(当前快递订单)。
- 发送一个我已下达交货订单的事件。
- 在站点地图上显示快递员的当前位置。
正如我所看到的,主要工作是创建后端,即应用程序本身(在讨论之后,我们选择ReactNative来开发应用程序,或者
将其
绑定在
-expo.io上 ,这使您根本无法编写本机代码)。 在后端方面,最初对Vanya Zverev充满希望,因为他是使用我们的服务模板和k8s的经验(他自己做了什么工作)。 ReactNative带我和Andrei Sarafanov。
我决定尝试立即为项目本身创建一个有效的存储库。 在12个晚上,我遇到了一个事实,即在ReactNative中后台地理位置不能很好地工作,如果您不编写本机代码,那会有些沮丧。 当我意识到我正在阅读的不是expo.io框架的文档,而是ReactNative的文档时,它就发布了。 结果,到了晚上,我已经很清楚如何在expo.io中获取当前位置并绘制单独的屏幕(用于登录,订单显示等)。

在黑客马拉松的早晨,格莱布(Gleb)被吸引到他的超级有前途的项目中。 他们迅速制定了需要做的计划。

当他们按照项目模板尝试不通过HTTP而是通过GRPC进行通信时,他们犯了一个错误,因为没人知道如何为JavaScript构建GRPC客户端。 结果,他们花了大约一个半小时的时间,才放弃了这个想法。 因此,伙计们和后面的人开始将完成的服务器从GRPC重做为WebApi。 半小时后,终于,我们能够配置应用程序与后端lo和bestand的通信。 但是与此同时,Gleb几乎完成了在k8s中的部署,并且通过提交给主服务器自动完成了任务。 :)
作为存储库,我们选择了MySQL,以便不冒基础风险(有人对CosmosDb有所想法)。

总结:
- 实现了将当前快递员坐标从应用程序保存到数据库。
- 他们搞砸了RabbitMQ并订阅了有关快递员接受订单的消息,以便立即在应用程序中显示快递员的订单。
- 快递员在应用程序中单击一个按钮后,我们开始节省将订单交付到数据库的时间。 我们没有时间来添加将事件发送回rebbit,以指示订单已交付。
- 我在网站上的currentorder页面上显示了具有当前快递员位置的地图。 但是,由于环境无法配置CORS来从我们的新服务中获取坐标,因此该功能仍未完成。
M87
罗马·布金(Roma Bukin),戈莎·波列沃(Gosha Polevoy ),乔治(Artyom Trofimushkin)我们想要实现OpenID Connect提供程序,因为目前我们使用自己设计的身份验证协议,这会带来许多困难:自定义客户端库,外部合作伙伴的不便工作以及可能的安全性问题(毕竟,OAuth2.0和OpenID Connect在参考实现中可以认为是安全的,但是对于我们的解决方案-我不确定)。

我们提供了一个单独的服务来模拟个人数据存储服务,以便创建一个与国家/地区无关的身份验证提供程序的小型模型,该模型将转至用于个人数据的单独服务(这使将来可以使用一项服务来使用您的帐户登录)记录在任何国家/地区,同时符合GDPR和其他联邦法律)。 我们像提供商一样完成了这一部分,并成功地将它们彼此链接。 接下来,我们需要制作一个受提供者颁发的令牌保护的API,通过提供者进行自省,并在请求满足授权策略的情况下发送受保护的数据(我们验证用户是否使用Bearer方案进行了身份验证,其令牌包含一定范围+用户本人具有允许进行呼叫的权限)。 这部分也已经完成。 最后一个组件是一个JavaScript客户端,该客户端将被授予令牌,并以此令牌调用安全的API。 我们没有做这部分。 也就是说,整个功能部分已经准备就绪,但是前端部分尚未准备好演示整个系统的可操作性。
呃(igruha)
Dima Afonchenko,Sasha Konovalov我们在一个小玩具上制作了一个迷你玩具,用活泼的手柄将香肠放在披萨上。 如果您不正确地扔了香肠,则会在屏幕上显示“已拒绝”的悲伤消息,如果正确地扔了整个香肠,则会出现有关披萨的随机事实。

他们想用西红柿撒到第二层,但没有时间。

简短的延续:谁赢了?
在黑客马拉松之前,我们与这些家伙进行了交谈,我问他们如果获胜将希望获得什么奖金。 事实证明,通往食物之路将是最有价值的奖励。

因此,我们很快就会期待该游戏的发布,该游戏将在比萨饼上顶住意大利辣香肠。
细心的读者会注意到,“ E-E-E(igruha)”团队获得了冠军。 恭喜大家!