Kodim-pizza

Xin chào, Habr. Chúng tôi tự phát tổ chức cuộc thi hackathon nội bộ đầu tiên của mình. Tôi quyết định chia sẻ với bạn những nỗi đau và kết luận của tôi về việc chuẩn bị cho nó trong 2 tuần, cũng như những dự án đã thực hiện được.

Kodim-pizza

Phần nhàm chán dành cho những người quan tâm đến tiếp thị

Tôi sẽ bắt đầu bằng một câu chuyện nhỏ.

Đầu tháng tư. Cuộc thi hackathon Cộng đồng MskDotNet đầu tiên đang diễn ra tại văn phòng của chúng tôi. Trận chiến Tatooine lần này đang diễn ra sôi nổi trong thiên hà của chúng ta. Thứ bảy. 20 đội. Pizza. Mọi thứ đều rất chân thành (bằng chứng). Một chiếc R2-D2 bơm hơi bay quanh hội trường. Các đội viết ra thuật toán chính xác nhất để vượt qua chặng đua nguy hiểm nhất bản đồ. Chúng tôi đang tiến hành khởi động các cuộc đua đầu tiên. Bánh quy và cà phê là cứu cánh. Ban tổ chức và tôi dự đoán rằng nhiều người sẽ rời đi sau bữa trưa ngày thứ Bảy. Nhưng không. 12 giờ mã hóa phía sau. Trận chung kết. Một cái gì đó rơi ra, một cái gì đó không bắt đầu. Nhưng mọi người đều hạnh phúc. Đội của chúng tôi thắng. Chúng tôi hạnh phúc gấp đôi.

Tôi đang chia sẻ niềm vui của mình với Slack và ý tưởng chợt nảy ra trong đầu: “Chúng ta cần thực hiện hackathon của riêng mình”. Tôi đang viết thư cho trạm dịch vụ Sasha của chúng tôi. Im lặng.

Buổi sáng. Tôi uống cà phê ở văn phòng. Tôi thấy Sasha đang tiến đến từ phía sau. “Lisa, điều này thật tuyệt vời! Chúng ta có một ngày quan trọng vào ngày 21 tháng XNUMX. Hãy làm nó!" Cái quái gì vậy!? Nhanh quá? MỘT? Cái gì? Tôi cần bay đến Syktyvkar để thực tập vào giữa tháng XNUMX. Và chết tiệt với nó! Hãy.

2 tuần nữa. Tôi chưa bao giờ là người tổ chức duy nhất một cuộc thi hackathon. Hãy để nó là nội bộ. Tôi đọc các bài viết về chủ đề này. Khó. Phải mất vài tháng. Cần vài người. Bạn cần suy nghĩ về hàng hóa, giải thưởng, điều kiện, tiến độ, lãi suất, hiểu rõ mục tiêu, ngân sách. Hoặc thậm chí có thể tìm ra ý nghĩa của cuộc sống. Tôi chắc chắn sẽ không đến kịp. Và trong khi bạn đang đọc và chuẩn bị thì một tuần đã trôi qua. Đã đến lúc quên đi những bài viết và bắt đầu làm điều gì đó.

Nắm bắt danh sách kiểm tra của chúng tôi để tổ chức hackathon nội bộ sau 1 tuần

  • kế hoạch: Bạn bình tĩnh ngồi xuống và viết danh sách những việc cần làm cho hackathon. Phút 30.
  • Nhiệm vụ: Người tham gia đề xuất và lựa chọn dự án họ muốn tạo trong Google Sheets. Tác vụ nền, 2 giờ.
  • Thời khóa biểu: trên đầu gối của bạn, bạn viết một đoạn phân tích ngắn về thời gian, có tính đến 3 lần nghỉ giải lao và trận chung kết. Phút 20.
  • Đội: xuất bản thông báo về hackathon với lịch trình từ trạm dịch vụ trên các kênh CNTT trong Slack/mail/etc và tạo một kênh riêng cho hackathon. Trong đó, mọi người được chia thành các đội và những người chưa quyết định sẽ thực hiện việc này trong 5 phút đầu tiên của hackathon. Tác vụ nền, 2 giờ.
  • bánh bao: bạn nghĩ ra hàng hóa với hai nhà phát triển, đưa nó cho nhà thiết kế để kết xuất và chuẩn bị sẵn sàng. Tác vụ nền, 3 ngày.
  • Hackathon: bạn đến văn phòng, điều phối mọi người ngay từ đầu, bắt tay vào công việc của mình, đọc Reddit, quan trọng là thông báo về mỗi giờ giải lao về pizza tươi, chụp ảnh hoàng hôn, công bố trận chung kết, cùng nhau bỏ phiếu và chọn ra người chiến thắng. ngày 1.
  • Dưới dấu hoa thị: Tất nhiên, bạn không ngừng nghĩ về việc mọi thứ sẽ diễn ra tốt đẹp. Tất nhiên, không phải ai cũng nhìn thấy tin nhắn của bạn và tốt hơn là bạn nên nói chuyện trực tiếp với một số người. Tất nhiên, nếu ai đó giúp bạn, mọi thứ sẽ trở nên dễ dàng hơn gấp 2 lần (Alena tuyệt vời đã giúp tôi).

Phần bớt nhàm chán hơn về ngày hackathon

Tại sao lại là ngày 21 tháng 21? Ngày này rất có ý nghĩa đối với chúng tôi. Cách đây đúng một năm, vào ngày 8 tháng 12, chúng tôi đã rơi vào tình trạng quá tải trong cuối tuần đầu tiên sau khi bắt đầu Chiến dịch Quảng cáo Liên bang. Ngày hôm sau, Chủ nhật, nhóm chúng tôi làm việc từ XNUMX giờ sáng. Sau đó, chúng tôi tạo một bảng chủ nhật hackathon trên Trello và bắt đầu một tuần làm việc theo ca, XNUMX giờ một ngày. Tình hình nguy cấp đến mức chúng tôi thậm chí không có thời gian để ăn và được những người ở đội khác cho ăn.

Kodim-pizza

Bạn có thể đọc một câu chuyện chi tiết hơn tại Trang của Fyodor Ovchinnikov (Giám đốc điều hành của chúng tôi). Kể từ đó, chúng ta đã thay đổi rất nhiều nhưng bây giờ chúng ta nhất định sẽ không quên ngày tháng ấy.

Năm nay, chúng tôi quyết định rằng sự kiện này đáng được lưu giữ trong ký ức của hậu thế và theo truyền thống tốt đẹp nhất, chúng tôi đã tổ chức cuộc thi hackathon nội bộ đầu tiên trong lịch sử Dodo, kéo dài 10 giờ.

Phần chán nhất trong các dự án hackathon

Tuyên bố miễn trừ trách nhiệm: tất cả các mô tả đều do chính các chàng trai viết nên quyền tác giả của văn bản không phải của tôi.

Học Oleg (học máy)

Dima Kochnev, Sasha Andronov (@alexandronov)

Họ muốn tạo ra một mạng lưới thần kinh có thể xác định loại pizza trong ảnh mà không cần bất kỳ kiến ​​thức nào. Kết quả là, chúng tôi đã tạo ra một món đồ chơi rất đơn giản - nó nhận dạng được 10 chiếc pizza, chúng tôi gần như đã tìm ra cách mọi thứ hoạt động, lâu nhất có thể trong một ngày (~10 giờ).

Kodim-pizza

Đặc biệt, chúng tôi nhận ra rằng ngành này đã đạt đến mức mà một nhà phát triển bình thường có thể sử dụng các thư viện làm sẵn, đọc tài liệu và đào tạo mạng lưới thần kinh của mình mà không cần có kiến ​​thức sâu về chủ đề này. Và nó sẽ hoạt động đủ tốt để giải quyết các vấn đề thực sự.

Công cụ được sử dụng:

  • hình ảnh — một thư viện thuận tiện và đơn giản để làm việc với học máy và thị giác máy tính.
  • Chúng tôi đã thử hai mô hình - ResNet50, Yolo.
  • Tất nhiên, mã được viết bằng Python.

Chúng tôi có 11000 bức ảnh, nhưng gần 3/4 trong số đó hóa ra là rác, số còn lại có những góc độ khác nhau, không phù hợp. Kết quả là, chúng tôi đã lấy một mô hình làm sẵn (đơn giản là biết cách tìm pizza) và với sự trợ giúp của nó, chúng tôi đã phân loại thùng rác. Tiếp theo, tiêu đề của bức ảnh bao gồm tên của chiếc bánh pizza - vì vậy chúng tôi đã sắp xếp nó vào các thư mục, nhưng hóa ra những cái tên đó không trùng với thực tế và chúng tôi phải dùng tay dọn dẹp nó. Cuối cùng, còn lại khoảng 500-600 bức ảnh, rõ ràng đây là một số lượng không đáng kể, nhưng tuy nhiên, điều này cũng đủ để tách 10 chiếc pizza ra khỏi nhau.

Để đào tạo lưới, chúng tôi đã sử dụng máy ảo rẻ nhất trong Azure trên NVIDIA Tesla K80. Họ đã đào tạo về nó trong 100 kỷ nguyên, nhưng rõ ràng là mạng đã quá bão hòa sau 50 kỷ nguyên, do thực tế là có một tập dữ liệu nhỏ.

Trên thực tế, toàn bộ vấn đề là thiếu dữ liệu tốt.

Kodim-pizza

Chúng tôi có thể đã nhầm lẫn các điều khoản một chút, nhưng chúng tôi phải tính đến việc chúng tôi không có kinh nghiệm gì khi làm việc với tất cả những vấn đề này.

GUI cho NOOBS (bảng điều khiển để đặt bánh pizza)

Misha Kumachev (Ceridan), Zhenya Bikkinin, Zhenya Vasiliev

Chúng tôi đã tập hợp một nguyên mẫu của ứng dụng bảng điều khiển dành cho những người đam mê công nghệ, nhờ đó bạn có thể đặt bánh pizza thông qua thiết bị đầu cuối hoặc dòng lệnh hoặc thậm chí tích hợp nó vào quy trình triển khai và sau khi phát hành thành công, sẽ giao bánh pizza đến văn phòng.

Kodim-pizza

Công việc được chia thành nhiều phần: chúng tôi đã tìm ra cách hoạt động của API dành cho ứng dụng di động, tập hợp CLI của riêng mình bằng cách sử dụng oclip và định cấu hình xuất bản gói mà chúng tôi đã thu thập. Nhiệm vụ cuối cùng liên quan đến một vài phút khó chịu ở cuối cuộc thi hackathon. Mọi thứ đều hoạt động cục bộ đối với chúng tôi và ngay cả các phiên bản cũ đã xuất bản của gói cũng hoạt động, nhưng các phiên bản mới (đã bổ sung thêm nhiều tính năng và biểu tượng cảm xúc thú vị hơn) đã từ chối hoạt động. Chúng tôi đã dành khoảng 40 phút để cố gắng tìm ra điều gì đã xảy ra, nhưng cuối cùng mọi thứ đều tự hoạt động một cách kỳ diệu).

Chương trình tối đa của chúng tôi cho hackathon là một đơn đặt hàng pizza thực sự đến văn phòng thông qua CLI của chúng tôi. Chúng tôi đã chạy mọi thứ hàng chục lần trên băng ghế thử nghiệm, nhưng tay tôi vẫn run khi nhập lệnh trong quá trình sản xuất.

Kodim-pizza

Kết quả là cuối cùng chúng tôi đã làm được!

Kodim-pizza

Chuyển phát nhanhGo

Anton Bruzhmelev (tác giả), Vanya Zverev, Gleb Lesnikov (entropy), Andrey Sarafanov

Chúng tôi lấy ý tưởng về một “Ứng dụng dành cho Chuyển phát nhanh”.

Bối cảnh về sự chuẩn bị.Ban đầu, tôi tự hỏi loại tính năng nào có thể có trong ứng dụng? Danh sách chức năng sau đây đã xuất hiện:

  • Ứng dụng đăng nhập vào máy tính tiền giao hàng bằng mã.
  • Ứng dụng hiển thị ngay các đơn hàng có sẵn và các đơn hàng cần thực hiện.
  • Người chuyển phát nhanh ghi lại đơn đặt hàng và mang nó đi trong chuyến đi.
  • Anh ta được hiển thị thời gian ước tính và liệu anh ta có đến đúng giờ hay không.
  • Cho khách hàng thấy rằng người chuyển phát nhanh đã rời đi.
  • Khách hàng bắt đầu được hiển thị điểm của người chuyển phát nhanh trên bản đồ và thời gian ước tính.
  • Người chuyển phát nhanh có thể viết thư cho khách hàng trong cuộc trò chuyện từ ứng dụng.
  • Khách hàng có thể viết thư cho người chuyển phát nhanh thông qua trò chuyện từ ứng dụng.
  • Năm phút trước khi đến, khách hàng nhận được tin nhắn rằng người chuyển phát nhanh đã đến gần, hãy chuẩn bị sẵn sàng.
  • Người đưa thư ghi trong đơn rằng anh ta đã đến và đang đợi.
  • Người chuyển phát nhanh gọi từ ứng dụng chỉ bằng một cú nhấp chuột và báo cáo rằng (đang tăng, đã đến, v.v.)
  • Khách hàng chấp nhận đơn hàng và nhập mã PIN từ ứng dụng hoặc SMS để xác nhận giao hàng (dưới dạng chữ ký) Để người chuyển phát nhanh không thể hoàn thành việc giao hàng trước nếu đến muộn.
  • Đơn hàng được đánh dấu là đã giao trong hệ thống.

Cộng với một vài kịch bản thay thế:

  • Người chuyển phát nhanh có thể đánh dấu đơn hàng là chưa được giao và chọn lý do.
  • Nếu bạn đến muộn, người chuyển phát nhanh có thể cấp chứng chỉ điện tử qua SMS chỉ bằng một nút bấm. Hoặc chứng chỉ sẽ tự động đến nếu thời hạn giao hàng không được đáp ứng.

Tất nhiên, cảm giác hứa hẹn và sự cần thiết của dự án này đã tiếp thêm sinh lực cho tôi.

Ngày hôm sau, chúng tôi đi ăn trưa với nhóm và thảo luận về chức năng tối thiểu của ứng dụng sẽ như thế nào.

Kết quả là danh sách sau đây về những việc phải làm tại hackathon đã được hình thành:

  • Đăng nhập vào máy tính tiền giao hàng.
  • Hiển thị vị trí hiện tại.
  • Gửi dữ liệu tới API bên ngoài (tọa độ, nhận đơn hàng, giao đơn hàng).
  • Nhận dữ liệu từ API bên ngoài (đơn đặt hàng chuyển phát nhanh hiện tại).
  • Gửi một sự kiện cho biết bạn đã nhận đơn hàng để giao hàng/đã giao hàng.
  • Hiển thị vị trí hiện tại của người đưa thư trên bản đồ trên website.

Có vẻ như công việc chính nằm ở việc tạo ra phần phụ trợ, chính ứng dụng (sau khi thảo luận, chúng tôi đã chọn ReactNative để phát triển ứng dụng, hay đúng hơn là khung cho nó - expo.io, cho phép bạn không phải viết mã gốc). Về phần phụ trợ, ban đầu có hy vọng ở Vanya Zverev, vì anh ấy có kinh nghiệm làm việc với mẫu dịch vụ và k8 của chúng tôi (công việc mà anh ấy đảm nhận). Andrey Sarafanov và tôi đã thử ReactNative.

Tôi quyết định thử tạo ngay một kho lưu trữ hoạt động cho chính dự án đó. Vào lúc 12 giờ đêm, tôi phát hiện ra rằng vị trí địa lý ở chế độ nền không hoạt động tốt trong ReactNative, nếu bạn không viết mã gốc, tôi hơi thất vọng. Sau đó, tôi buông tay khi nhận ra rằng tôi đang đọc tài liệu không phải về framework expo.io mà là về ReactNative. Kết quả là, trong suốt buổi tối, tôi đã hiểu cách có được vị trí hiện tại trong expo.io và vẽ các màn hình riêng biệt (để đăng nhập, hiển thị đơn hàng, v.v.).

Kodim-pizza

Vào buổi sáng tại cuộc thi hackathon, họ đã dụ dỗ Gleb tham gia vào dự án siêu hứa hẹn của mình. Họ nhanh chóng đưa ra kế hoạch về những việc cần phải làm.

Kodim-pizza

Chúng tôi đã mắc sai lầm khi, theo mẫu dự án, chúng tôi đã cố gắng giao tiếp không phải qua HTTP mà qua GRPC, vì không ai biết cách xây dựng ứng dụng khách GRPC cho JavaScript. Cuối cùng, sau khi dành khoảng một tiếng rưỡi cho việc này, chúng tôi đã từ bỏ ý tưởng này. Vì điều này, những người ở back-end bắt đầu làm lại máy chủ đã hoàn thiện từ GRPC sang WebApi. Sau nửa giờ, cuối cùng chúng tôi cũng có thể thiết lập liên lạc giữa ứng dụng và chương trình phụ trợ, thật lạ. Nhưng đồng thời, Gleb gần như đã hoàn thành việc triển khai lên k8 và cộng với việc tự động triển khai cam kết với bản gốc. 🙂

Chúng tôi đã chọn MySQL làm nơi lưu trữ để ít nhất không gặp rủi ro với cơ sở dữ liệu (chúng tôi đã nghĩ đến CosmosDb).

Kodim-pizza

Tóm lại:

  • Đã triển khai lưu tọa độ hiện tại của người chuyển phát nhanh từ ứng dụng vào cơ sở dữ liệu.
  • Chúng tôi đã cài đặt RabbitMQ và đăng ký tin nhắn về việc người chuyển phát nhanh đang nhận đơn hàng để hiển thị ngay đơn hàng từ người chuyển phát nhanh trong ứng dụng.
  • Chúng tôi bắt đầu lưu thời gian giao đơn hàng vào cơ sở dữ liệu của mình sau khi nhân viên chuyển phát nhấn nút trong ứng dụng. Chúng tôi không có thời gian để thêm việc gửi lại sự kiện vào rebbit khi đơn hàng đã được giao.
  • Tôi đã tạo một bản đồ hiển thị trên trang đặt hàng hiện tại trên website với vị trí hiện tại của người chuyển phát nhanh. Nhưng chức năng này vẫn chưa hoàn thiện vì không thể định cấu hình CORS trong môi trường để nhận tọa độ từ dịch vụ mới của chúng tôi.

M87

Roma Bukin, Gosha Polevoy (georgepolevoy), Artyom Trofimushkin

Chúng tôi muốn triển khai nhà cung cấp OpenID Connect, vì hiện tại chúng tôi sử dụng giao thức xác thực do chính chúng tôi thiết kế và điều này tạo ra một số khó khăn: thư viện máy khách tùy chỉnh, công việc bất tiện từ phía đối tác bên ngoài, các vấn đề bảo mật có thể xảy ra (xét cho cùng , OAuth2.0 và OpenID Connect trong quá trình triển khai tham chiếu có thể được coi là an toàn, nhưng tôi không chắc chắn về giải pháp của chúng tôi).

Kodim-pizza

Chúng tôi đã tạo một dịch vụ riêng biệt mô phỏng dịch vụ lưu trữ dữ liệu cá nhân nhằm tạo ra một mô hình nhỏ của nhà cung cấp dịch vụ xác thực theo quốc gia sẽ chuyển sang một dịch vụ riêng cho dữ liệu cá nhân (điều này trong tương lai sẽ giúp có thể có một dịch vụ với mà người ta có thể đăng nhập bằng đăng ký tài khoản ở bất kỳ quốc gia nào, đồng thời tuân thủ GDPR và các luật liên bang khác). Chúng tôi đã thực hiện phần này, nhà cung cấp cũng vậy và liên kết chúng với nhau thành công. Tiếp theo, cần tạo một API sẽ được bảo vệ bằng mã thông báo do nhà cung cấp phát hành, hỗ trợ việc xem xét nội tâm của họ thông qua nhà cung cấp và trả lại dữ liệu được bảo vệ nếu yêu cầu thỏa mãn chính sách ủy quyền (chúng tôi kiểm tra xem người dùng đã được xác thực theo sơ đồ Bearer hay chưa , mã thông báo của anh ấy chứa một phạm vi nhất định + y Bản thân người dùng có quyền cho phép thực hiện cuộc gọi). Phần này cũng đã hoàn thành. Thành phần cuối cùng là một ứng dụng khách JavaScript, sẽ được cấp một mã thông báo, với sự trợ giúp của nó sẽ gọi một API được bảo vệ. Chúng tôi không có thời gian để làm phần này. Nghĩa là, toàn bộ phần chức năng đã sẵn sàng, nhưng phần giao diện người dùng chưa sẵn sàng để thể hiện chức năng của toàn bộ hệ thống.

E-E-E (đồ chơi)

Dima Afonchenko, Sasha Konovalov

Chúng tôi đã làm một món đồ chơi nhỏ trên Yunka trong đó những bàn tay vui nhộn ném xúc xích lên bánh pizza. Nếu bạn đặt xúc xích vào không đúng cách, một thông báo buồn “Bị từ chối” sẽ xuất hiện trên màn hình và nếu tất cả xúc xích được đặt đúng cách, một thông tin ngẫu nhiên về pizza sẽ xuất hiện.

Kodim-pizza

Chúng tôi muốn đạt đến cấp độ thứ hai với trò ném cà chua, nhưng chúng tôi không có thời gian.

Kodim-pizza

Tiếp tục ngắn: ai thắng?

Trước cuộc thi hackathon, chúng tôi đã nói chuyện với các bạn và tôi đã hỏi họ muốn nhận giải thưởng gì nếu giành chiến thắng. Hóa ra giải thưởng có giá trị nhất sẽ là “con đường đến với thực phẩm”.

Kodim-pizza

Vì vậy, hãy mong đợi chúng tôi sẽ sớm công bố một trò chơi có bàn tay đặt hạt tiêu lên bánh pizza.

Như một độc giả chú ý có thể đã nhận thấy, đội “E-E-E (đồ chơi)” đã thắng. Xin chúc mừng các bạn!

Chỉ những người dùng đã đăng ký mới có thể tham gia khảo sát. Đăng nhập, xin vui lòng.

Bạn thích dự án nào nhất?

  • Học Oleg (học máy)

  • GUI cho NOOBS

  • Chuyển phát nhanhGo

  • M87

  • E-E-E

5 người dùng bình chọn. 3 người dùng bỏ phiếu trắng.

Nguồn: www.habr.com

Thêm một lời nhận xét