科丁披薩

你好,哈布爾。 我們自發地舉辦了第一次內部黑客馬拉松。 我決定與大家分享我在兩週內準備的痛苦和結論,以及最終的項目。

科丁披薩

對於那些對營銷感興趣的人來說無聊的部分

我將從一個小故事開始。

四月初。 第一屆 MskDotNet 社區黑客馬拉松正在我們的辦公室舉行。 塔圖因之戰此時在我們銀河系如火如荼地進行著。 週六。 20 隊。 披薩. 一切都很真誠(證明)。 一個充氣 R2-D2 漂浮在大廳周圍。 團隊編寫最正確的算法來通過地圖上最危險的比賽。 我們正在推遲第一場比賽的啟動。 餅乾和咖啡是救星。 組織者和我預計週六午餐後很多人會離開。 但不是。 12 個小時的編碼落後。 決賽。 有些東西掉下來了,有些東西沒有開始。 但大家都很開心。 我們隊贏了。 我們倍感幸福。

當我在 Slack 中分享我的快樂時,我的腦海中浮現出一個想法:“我們需要舉辦我們自己的黑客馬拉松。” 我正在寫信給我們的薩莎服務站。 安靜。

早晨。 我在辦公室喝咖啡。 我看到薩沙從後面走來。 “麗莎,這太棒了! 21 月 XNUMX 日是一個重要的日子。 我們開始做吧! ” 臥槽!? 很快? A? 什麼? 我需要在四月中旬飛往瑟克特夫卡爾實習。 見鬼去吧! 讓我們。

還剩 2 週。 我從來都不是黑客馬拉鬆的唯一組織者。 讓它成為內部的。 我讀過有關這個主題的文章。 艱難的。 這需要幾個月的時間。 需要幾個人。 你需要考慮商品、獎品、條件、時間表、興趣,了解目標、預算。 或者甚至可以弄清楚生命的意義。 我肯定趕不上時間了。 當你在閱讀和準備的時候,一周已經過去了。 是時候忘記這些文章並開始做點什麼了。

查看我們在 1 週內舉辦內部黑客馬拉鬆的清單

  • 計畫:你平靜地坐下來,寫下黑客馬拉松需要做的事情的清單。 30分鐘.
  • 任務:參與者提出並選擇他們想要在 Google 表格中創建的項目。 後台任務,2小時.
  • 時間表:在膝蓋上寫下簡短的時間細目,其中考慮了 3 次休息和最後一次。 20分鐘.
  • 命令:在Slack/mail/等IT頻道中,從服務站發布有關黑客馬拉鬆的消息和時間表,並為黑客馬拉松創建單獨的頻道。 其中,每個人都被分成小組,那些猶豫不決的人會在黑客馬拉鬆的前 5 分鐘內這樣做。 後台任務,2小時.
  • 包子:您與兩個開發人員一起提出商品,將其交給設計師進行渲染,然後準備好接收。 後台任務,3天.
  • 黑客松:你來到辦公室,一開始就協調好每個人,處理你的事情,閱讀Reddit,重要的是宣布每一次有關新鮮披薩的休息,拍攝日落照片,宣布決賽,一起投票並選擇獲勝者。 1天.
  • 星號下:當然,你總是想著一切都進展順利。 當然,並不是每個人都會看到您的消息,最好親自與某些人交談。 當然,如果有人幫助你,一切都會變得容易2倍(很棒的Alena幫助了我)。

關於黑客馬拉松日期不那麼無聊的部分

為什麼是 21 月 21 日? 這一天對我們來說意義重大。 就在一年前,即 8 月 12 日,聯邦廣告活動開始後的第一個週末,我們陷入了超負荷狀態。 第二天,週日,我們的團隊從早上 XNUMX 點開始工作。 然後我們在 Trello 中創建了一個週日黑客馬拉松板,並開始了一周的輪班工作,每天 XNUMX 小時。 情況非常危急,我們連吃飯的時間都沒有,就由其他隊的人餵我們。

科丁披薩

您可以閱讀更詳細的故事: 費奧多爾·奧夫欽尼科夫的頁面 (我們的首席執行官)。 從那以後,我們改變了很多,但現在我們絕對不會忘記那個日子。

今年,我們認為這一活動值得後人永遠銘記,並按照最佳傳統,組織了 Dodo 歷史上的第一次內部黑客馬拉松,持續了 10 個小時。

黑客馬拉松項目中最無聊的部分

免責聲明:所有描述都是由他們自己寫的,所以文本的作者不是我的。

奧列格學習(機器學習)

迪瑪·科赫涅夫、薩沙·安德羅諾夫 (@alexandronov)

他們想要建立一個神經網絡,可以在沒有任何知識的情況下確定照片中的披薩是什麼類型。 結果,我們製作了一個非常簡單的玩具 - 它可以識別 10 個披薩,我們盡可能在一天(約 10 小時)內大致弄清楚一切是如何工作的。

科丁披薩

特別是,我們意識到該行業已經達到了一個水平,普通開發人員可以使用現成的庫、閱讀文檔並訓練他的神經網絡,而無需深入了解該主題。 而且它能夠很好地解決實際問題。

使用的工具:

  • 圖像AI — 一個方便簡單的庫,用於處理機器學習和計算機視覺。
  • 我們嘗試了兩種模型——ResNet50、Yolo。
  • 當然,代碼是用 Python 編寫的。

我們有 11000 張照片,但其中幾乎 3/4 結果是垃圾,其餘的則有不同的、不合適的角度。 因此,我們採用了一個現成的模型(它只知道如何找到披薩),並在它的幫助下我們分離了垃圾。 接下來,照片的標題包含了披薩的名稱 - 所以我們將其分類到文件夾中,但結果發現這些名稱與實際不符,我們不得不用手清理它。 最後還剩下大約500-600張照片,顯然這是一個微不足道的數字,但儘管如此,這也足以將10個披薩分開。

為了訓練網格,我們在 NVIDIA Tesla K80 上使用了 Azure 中最便宜的虛擬機。 他們對其進行了 100 個 epoch 的訓練,但很明顯,由於數據集較小,網絡在 50 個 epoch 後就已經過度飽和。

事實上,整個問題在於缺乏好的數據。

科丁披薩

我們可能對這些術語有點困惑,但我們必須考慮到我們根本沒有處理所有這些問題的經驗。

NOOBS GUI(用於訂購披薩的控制台)

米沙·庫馬切夫(塞里丹)、熱尼亞·比基寧、熱尼亞·瓦西里耶夫

我們為極客們打造了一個控制台應用程序的原型,通過它,您可以通過終端或命令行訂購披薩,甚至將其集成到部署管道中,並在成功發布後將披薩送到辦公室。

科丁披薩

這項工作分為幾個部分:我們弄清楚了移動應用程序的 API 是如何工作的,使用 奧克利夫 並配置了我們收集的包的發布。 最後一項任務涉及黑客馬拉鬆快結束時的一些不愉快的幾分鐘。 一切都在本地為我們工作,甚至舊的發布版本的軟件包也能工作,但新的版本(添加了更多酷的功能和表情符號)拒絕工作。 我們花了大約 40 分鐘試圖找出問題所在,但最終一切都神奇地自行發揮作用)。

我們這次黑客馬拉鬆的最大計劃是通過 CLI 向辦公室真正訂購披薩。 我們在測試台上運行了十幾次,但當我在生產中輸入命令時,我的手仍然在顫抖。

科丁披薩

結果,我們終於做到了!

科丁披薩

快遞快運

安東·布魯日梅列夫(作者)、瓦尼亞·茲韋列夫、格列布·列斯尼科夫(), 安德烈·薩拉法諾夫

我們提出了“快遞應用程序”的想法。

有關準備的背景。最初,我想知道應用程序中有哪些功能? 出現了以下功能列表:

  • 應用程序使用代碼登錄送貨收銀機。
  • 該應用程序立即顯示可用訂單和需要接受的訂單。
  • 快遞員記下訂單並隨身攜帶。
  • 他會看到預計時間以及他是否準時。
  • 向客戶顯示快遞員已離開。
  • 開始向客戶顯示地圖上的快遞點和預計時間。
  • 快遞員可以通過應用程序通過聊天方式給客戶寫信。
  • 客戶可以通過應用程序中的聊天方式給快遞員寫信。
  • 到貨前五分鐘,客戶收到快遞到門的消息,做好準備。
  • 快遞員在申請中註明他已到達並正在等待。
  • 快遞員一鍵從應用程序中呼叫並報告(正在上升、已到達等)
  • 客戶接受訂單並從應用程序或短信中輸入PIN碼以確認送貨(作為簽名),以便快遞員如果遲到則無法提前完成送貨。
  • 訂單在系統中標記為已交付。

再加上一些替代方案:

  • 快遞員可以將訂單標記為未送達並選擇原因。
  • 如果遲到,快遞員可以通過短信一鍵開具電子憑證。 或者,如果未滿足交付期限,證書將自動到達。

當然,這個項目的承諾和必要性令人振奮。

第二天,我們與團隊共進午餐,討論了應用程序的最低功能。

因此,形成了以下在黑客馬拉松中必須完成的任務列表:

  • 登錄送貨收銀機。
  • 顯示當前位置。
  • 將數據發送到外部 API(坐標、接收訂單、交付訂單)。
  • 從外部API接收數據(當前快遞訂單)。
  • 發送一個事件,表明您已接受訂單交付/已交付。
  • 在網站的地圖上顯示快遞員的當前位置。

看起來,主要工作在於創建後端、應用程序本身(經過討論,我們選擇了 ReactNative 來開發應用程序,或者更確切地說是它的框架 - 世博網,這允許您根本不編寫本機代碼)。 在後端方面,最初對 Vanya Zverev 抱有希望,因為他在使用我們的服務模板和 k8s 方面經驗豐富(他承擔了這項工作)。 Andrey Sarafanov 和我試用了 ReactNative。

我決定嘗試立即為項目本身創建一個工作存儲庫。 晚上12點我發現ReactNative中後台的地理定位效果不好,如果不寫原生代碼,我有點沮喪。 然後當我意識到我正在閱讀的不是expo.io框架的文檔,而是ReactNative的文檔時,我放手了。 結果,整個晚上我已經了解瞭如何獲取 expo.io 中的當前位置並繪製單獨的屏幕(用於登錄、訂單顯示等)。

科丁披薩

早上在黑客馬拉鬆上,他們引誘格萊布加入他們超級有前途的項目。 他們很快就制定了需要做什麼的計劃。

科丁披薩

當我們按照項目模板嘗試不通過 HTTP 而是通過 GRPC 進行通信時,我們犯了一個錯誤,因為沒有人知道如何為 JavaScript 構建 GRPC 客戶端。 最終,在花了大約一個半小時的時間後,我們放棄了這個想法。 正因為如此,後端的人開始將完成的服務器從 GRPC 重新製作為 WebApi。 半小時後,我們終於能夠在應用程序和後端之間建立通信,你瞧。 但與此同時,Gleb 幾乎完成了對 k8s 的部署以及對 master 的提交的自動部署。 🙂

我們選擇 MySQL 作為存儲,以避免至少在數據庫方面承擔風險(我們考慮過 CosmosDb)。

科丁披薩

概括如下:

  • 實現將快遞員的當前坐標從應用程序保存到數據庫。
  • 我們安裝了 RabbitMQ 並訂閱了快遞員取貨的消息,以便立即在應用程序中顯示快遞員的訂單。
  • 快遞員按下應用程序中的按鈕後,我們開始將訂單交付時間保存到數據庫中。 我們沒有時間添加將事件發送回訂單已交付的 rebbit。
  • 我在網站的當前訂單頁面上製作了一個地圖,其中顯示了快遞員的當前位置。 但此功能仍有一點未完成,因為無法在環境中配置 CORS 以從我們的新服務接收坐標。

M87

羅馬·布金、戈莎·波萊沃伊 (喬治波萊沃伊), 阿爾喬姆·特羅菲穆甚金

我們想要實現一個 OpenID Connect 提供程序,因為目前我們使用我們自己設計的身份驗證協議,這會帶來許多困難:自定義客戶端庫、外部合作夥伴的不便工作、可能的安全問題(畢竟,參考實現中的OAuth2.0和OpenID Connect可以認為是安全的,但我不確定我們的解決方案)。

科丁披薩

我們製作了一項單獨的服務,模擬存儲個人數據的服務,以便創建一個小型的與國家無關的身份驗證提供商模型,該模型將使用單獨的個人數據服務(這將在未來使一項服務與可以使用任何國家的帳戶註冊登錄,同時遵守GDPR和其他聯邦法律)。 我們和提供商一樣完成了這部分,並成功地將它們相互鏈接起來。 接下來,需要創建一個由提供商發布的令牌保護的 API,支持通過提供商進行自省,並在請求滿足授權策略時返回受保護的數據(我們檢查用戶是否根據 Bearer 方案進行了身份驗證) ,他的token包含一定範圍+y用戶本身有允許調用的權限)。 這部分也完成了。 最後一個組件是 JavaScript 客戶端,它將獲得一個令牌,借助該令牌可以調用受保護的 API。 我們沒有時間做這部分。 也就是說,整個功能部分已經準備好了,但是前端部分還沒有準備好來演示整個系統的功能。

E-E-E(玩具)

迪瑪·阿豐琴科、薩莎·科諾瓦洛夫

我們在 yunka 上製作了一個迷你玩具,靈活的雙手將香腸扔到披薩上。 如果你把香腸放錯了,屏幕上會出現一條悲傷的“拒絕”消息,如果所有香腸都放正確了,就會出現一個關於披薩的隨機事實。

科丁披薩

我們想用投擲西紅柿來製作第二個關卡,但我們沒有時間。

科丁披薩

簡短的延續:誰贏了?

在黑客馬拉松之前,我們與這些人進行了交談,我問他們如果獲勝希望獲得什麼獎勵。 事實證明,最有價值的獎品是“通往食物的道路”。

科丁披薩

因此,預計我們很快就會推出一款用手將胡椒粉放在披薩上的遊戲。

細心的讀者可能已經註意到,“E-E-E(玩具)”隊獲勝。 恭喜你們!

只有註冊用戶才能參與調查。 登入, 請。

您最喜歡哪個項目?

  • 奧列格學習(機器學習)

  • NOOBS 的 GUI

  • 快遞快運

  • M87

  • 東-東-東

5 位用戶投票。 3 名用戶棄權。

來源: www.habr.com

添加評論