Hackathon DevDays'19 (phần 1): nhật ký với các khuyến nghị, công cụ tạo lộ trình đi bộ và nền dân chủ lỏng lẻo

Gần đây chúng tôi nói về chương trình thạc sĩ doanh nghiệp của JetBrains và Đại học ITMO “Phát triển phần mềm / Kỹ thuật phần mềm”. Chúng tôi mời tất cả những người quan tâm đến tham dự ngày khai trương vào thứ Hai, ngày 29 tháng XNUMX. Chúng tôi sẽ cho bạn biết về những lợi ích của chương trình thạc sĩ của chúng tôi, những phần thưởng mà chúng tôi cung cấp cho sinh viên và những gì chúng tôi yêu cầu đổi lại. Ngoài ra, chúng tôi chắc chắn sẽ giải đáp các thắc mắc của khách hàng.

Hackathon DevDays'19 (phần 1): nhật ký với các khuyến nghị, công cụ tạo lộ trình đi bộ và nền dân chủ lỏng lẻoNgày khai mạc sẽ được tổ chức tại văn phòng JetBrains ở Trung tâm Kinh doanh Times, nơi các sinh viên thạc sĩ của chúng tôi theo học. Bắt đầu lúc 17:00. Bạn có thể tìm hiểu tất cả các thông tin chi tiết và đăng ký sự kiện trên trang web mse.itmo.ru. Hãy đến và bạn sẽ không hối tiếc!

Một trong những thành phần chính của chương trình là thực hành. Học sinh có rất nhiều thứ: bài tập về nhà hàng tuần, dự án học kỳ và hackathons. Nhờ hoàn toàn hòa nhập vào các phương pháp và công nghệ phát triển hiện đại trong quá trình học, sinh viên tốt nghiệp nhanh chóng hòa nhập vào quy trình làm việc của các công ty CNTT lớn.

Trong bài đăng này, chúng tôi muốn nói chi tiết hơn về hackathons DevDays, diễn ra sáu tháng một lần. Quy tắc rất đơn giản: các nhóm gồm 3-4 người tập hợp lại và trong ba ngày, học sinh sẽ biến ý tưởng của riêng mình thành hiện thực. Điều gì có thể xảy ra với điều này? Đọc phần đầu câu chuyện về dự án hackathon học kỳ này từ chính các bạn sinh viên :)

Nhật ký với các đề xuất phim

Hackathon DevDays'19 (phần 1): nhật ký với các khuyến nghị, công cụ tạo lộ trình đi bộ và nền dân chủ lỏng lẻo

Tác giả của ý tưởng
Ivan Ilchuk
Xếp hàng
Ivan Ilchuk – phân tích cốt truyện phim, máy chủ
Vladislav Korablinov – phát triển mô hình để so sánh mức độ gần gũi của một mục nhật ký và cốt truyện của một bộ phim
Dmitry Valchuk – Giao diện người dùng
Nikita Vinokurov – Giao diện người dùng, thiết kế

Mục tiêu của dự án của chúng tôi là viết một ứng dụng dành cho máy tính để bàn - một cuốn nhật ký giới thiệu phim cho người dùng dựa trên các mục trong đó.

Ý tưởng này đến với tôi khi tôi đang trên đường đến trường đại học và đang suy nghĩ về những vấn đề của mình. Tôi nghĩ: “Bất kể một người phải đối mặt với vấn đề gì thì một nhà văn cổ điển nào đó đã viết về nó rồi”. “Và vì ai đó đã viết nó, có nghĩa là ai đó đã quay nó rồi.” Vì vậy, mong muốn được xem một bộ phim về một người cùng nỗi đau tinh thần xuất hiện một cách tự nhiên.

Rõ ràng, có rất nhiều loại nhật ký riêng biệt và dịch vụ giới thiệu riêng biệt (nhưng thông thường các đề xuất đều dựa trên những gì người đó thích trước đó). Về nguyên tắc, dự án này có điểm chung với việc tìm kiếm phim theo các điểm chính, nhưng trước hết, ứng dụng của chúng tôi cung cấp chức năng của một cuốn nhật ký.

Hackathon DevDays'19 (phần 1): nhật ký với các khuyến nghị, công cụ tạo lộ trình đi bộ và nền dân chủ lỏng lẻoChúng tôi đã thực hiện điều này như thế nào? Khi bạn nhấn nút ma thuật, nhật ký sẽ gửi một mục đến máy chủ, nơi phim được chọn dựa trên mô tả lấy từ Wikipedia. Giao diện người dùng của chúng tôi được tạo bằng Electron (chúng tôi sử dụng nó, không phải trang web, vì ban đầu chúng tôi quyết định lưu trữ dữ liệu người dùng không phải trên máy chủ mà cục bộ trên máy tính), còn máy chủ và hệ thống đề xuất được tạo bằng Python: TF là thu được từ các vectơ mô tả -IDF được so sánh về độ gần với vectơ mục nhập nhật ký.

Một thành viên trong nhóm chỉ làm việc trên mô hình, người còn lại làm việc hoàn toàn trên front-end (ban đầu cùng với thành viên thứ ba, sau này chuyển sang thử nghiệm). Tôi đang tham gia phân tích cốt truyện phim từ Wikipedia và máy chủ.

Từng bước một, chúng tôi tiến gần hơn đến kết quả, khắc phục một số vấn đề, bắt đầu từ việc mô hình ban đầu yêu cầu nhiều RAM, kết thúc là khó truyền dữ liệu đến máy chủ.

Giờ đây, để tìm một bộ phim cho buổi tối, bạn không cần nỗ lực nhiều: kết quả công việc kéo dài ba ngày của chúng tôi là một ứng dụng dành cho máy tính để bàn và một máy chủ mà người dùng truy cập qua https, nhận được phản hồi tuyển chọn gồm 5 phim với một mô tả ngắn gọn và một tấm áp phích.

Ấn tượng của tôi về dự án là rất tích cực: tác phẩm hấp dẫn từ sáng sớm cho đến tận đêm khuya, và ứng dụng kết quả định kỳ tạo ra những kết quả cực kỳ hài hước theo phong cách “Đêm không ngủ” cho một mục nhật ký về bài tập về nhà ở trường đại học hoặc một bộ phim kể về ngày đầu tiên đến trường cho câu chuyện về ngày đầu tiên đến khoa.

Có thể tìm thấy các liên kết, trình cài đặt, v.v. có liên quan đây.

Trình tạo tuyến đường

Hackathon DevDays'19 (phần 1): nhật ký với các khuyến nghị, công cụ tạo lộ trình đi bộ và nền dân chủ lỏng lẻoTác giả của ý tưởng
Artemyeva Irina
Xếp hàng
Artemyeva Irina – trưởng nhóm, vòng lặp chính
Gordeeva Lyudmila – âm nhạc
Platonov Vladislav – các tuyến đường

Tôi thực sự thích đi dạo quanh thành phố: ngắm nhìn các tòa nhà, con người và suy nghĩ về lịch sử. Nhưng, ngay cả khi thay đổi nơi ở, sớm hay muộn tôi cũng phải đối mặt với vấn đề chọn đường đi: Tôi đã hoàn thành tất cả những gì tôi có thể nghĩ ra. Đây là cách nảy sinh ý tưởng tự động hóa việc tạo các tuyến đường: bạn chỉ ra điểm bắt đầu và độ dài của tuyến đường và chương trình sẽ đưa ra một tùy chọn. Các chuyến đi bộ có thể dài, do đó, sự phát triển hợp lý của ý tưởng dường như sẽ bổ sung thêm khả năng chỉ ra các điểm trung gian cho một “điểm dừng”, nơi bạn có thể ăn nhẹ và nghỉ ngơi. Một nhánh phát triển khác là âm nhạc. Đi bộ theo nhạc luôn thú vị hơn, vì vậy sẽ thật tuyệt nếu thêm khả năng chọn danh sách phát dựa trên tuyến đường đã tạo.

Không thể tìm thấy giải pháp như vậy trong số các ứng dụng hiện có. Điểm tương tự gần nhất là bất kỳ công cụ lập kế hoạch tuyến đường nào: Google Maps, 2GIS, v.v.

Sẽ thuận tiện nhất khi có một ứng dụng như vậy trên điện thoại của bạn, vì vậy sử dụng Telegram là một lựa chọn tốt. Nó cho phép bạn hiển thị bản đồ và phát nhạc và bạn có thể kiểm soát tất cả những điều này bằng cách viết bot. Công việc chính với bản đồ được thực hiện bằng API Google Map. Python giúp dễ dàng kết hợp cả hai công nghệ.

Trong nhóm có ba người nên nhiệm vụ được chia thành hai nhiệm vụ phụ không chồng chéo (làm việc với bản đồ và làm việc với âm nhạc) để các anh chàng có thể làm việc độc lập và tôi tự mình kết hợp các kết quả.

Hackathon DevDays'19 (phần 1): nhật ký với các khuyến nghị, công cụ tạo lộ trình đi bộ và nền dân chủ lỏng lẻoKhông ai trong chúng tôi từng làm việc với API Google Map hoặc các bot Telegram bằng văn bản, vì vậy vấn đề chính là lượng thời gian được phân bổ để thực hiện dự án: hiểu một điều gì đó luôn mất nhiều thời gian hơn là làm điều gì đó bạn biết rõ. Việc chọn API bot Telegram cũng rất khó khăn: do bị chặn nên không phải tất cả chúng đều hoạt động và tôi đã phải vật lộn để thiết lập mọi thứ.

Điều đáng nói riêng là vấn đề tạo tuyến đường đã được giải quyết như thế nào. Thật dễ dàng để xây dựng tuyến đường giữa hai vị trí, nhưng bạn có thể cung cấp cho người dùng những gì nếu chỉ biết độ dài của tuyến đường? Hãy để người dùng muốn đi bộ 10 km. Một điểm được chọn theo hướng tùy ý, khoảng cách đến đó theo đường thẳng là 10 km, sau đó tuyến đường được xây dựng đến điểm này dọc theo đường thật. Rất có thể nó sẽ không thẳng nên chúng tôi sẽ rút ngắn nó xuống còn 10 km đã chỉ định. Có rất nhiều lựa chọn cho các tuyến đường như vậy - chúng tôi có một trình tạo tuyến đường thực sự!

Ban đầu, tôi muốn chia bản đồ thành các khu vực tương ứng với các khu vực xanh: bờ kè, sân trong, đường phố để có được con đường đi dạo dễ chịu nhất, đồng thời tạo ra âm nhạc phù hợp với các khu vực này. Nhưng thực hiện việc này bằng API Google Map hóa ra lại rất khó khăn (chúng tôi không có thời gian để giải quyết vấn đề này). Tuy nhiên, có thể triển khai việc xây dựng tuyến đường thông qua các loại địa điểm cụ thể (cửa hàng, công viên, thư viện): nếu tuyến đường đi vòng quanh tất cả các địa điểm đã chỉ định nhưng chưa đi được quãng đường mong muốn thì tuyến đường đó đã hoàn thành thành một khoảng cách do người dùng chỉ định theo hướng ngẫu nhiên. API Google Map cũng cho phép bạn tính toán thời gian di chuyển ước tính, giúp bạn chọn danh sách phát chính xác cho toàn bộ chuyến đi bộ.

Như một kết quả, quản lý để tạo ra một thế hệ tuyến đường theo điểm xuất phát, khoảng cách và điểm trung gian; Mọi thứ đã được chuẩn bị sẵn sàng để phân loại âm nhạc theo các phần của tuyến đường, nhưng do không có thời gian nên người ta quyết định để lại tùy chọn chọn danh sách phát đơn giản như một nhánh giao diện người dùng bổ sung. Do đó, người dùng có thể độc lập chọn nhạc để nghe.

Vấn đề chính khi làm việc với âm nhạc là không biết lấy tệp mp3 từ đâu mà không yêu cầu người dùng phải có tài khoản trên bất kỳ dịch vụ nào. Người dùng đã quyết định yêu cầu nhạc từ người dùng (chế độ UserMusic). Điều này tạo ra một vấn đề mới: không phải ai cũng có khả năng tải xuống các bản nhạc. Một giải pháp là tạo một kho lưu trữ nhạc từ người dùng (chế độ BotMusic) - từ đó bạn có thể tạo nhạc bất kể dịch vụ nào.

Mặc dù không hoàn hảo nhưng chúng tôi đã hoàn thành nhiệm vụ: chúng tôi đã có được một ứng dụng mà tôi muốn sử dụng. Nói chung, điều này rất tuyệt: ba ngày trước bạn chỉ có một ý tưởng chứ không hề có một suy nghĩ nào về cách thực hiện nó một cách chính xác, nhưng bây giờ đã có một giải pháp hiệu quả. Đây là ba ngày rất quan trọng đối với tôi, tôi không còn ngại nghĩ ra những điều mà mình chưa đủ kiến ​​thức để thực hiện, làm trưởng nhóm cực kỳ thú vị và tôi đã quen được những chàng trai tuyệt vời đã gia nhập nhóm của mình. tốt hơn!

Dân chủ lỏng

Hackathon DevDays'19 (phần 1): nhật ký với các khuyến nghị, công cụ tạo lộ trình đi bộ và nền dân chủ lỏng lẻo

Tác giả của ý tưởng
Stanislav Sychev
Xếp hàng
Stanislav Sychev – trưởng nhóm, cơ sở dữ liệu
Nikolay Izyumov – giao diện bot
Anton Ryabushev – phụ trợ

Trong các nhóm khác nhau, thường có nhu cầu đưa ra quyết định hoặc biểu quyết. Thông thường trong những trường hợp như vậy họ dùng đến Dân chủ trực tiếptuy nhiên, khi nhóm đông người, vấn đề có thể nảy sinh. Ví dụ: một người trong nhóm có thể không muốn trả lời câu hỏi thường xuyên hoặc trả lời câu hỏi về một số chủ đề nhất định. Trong các nhóm lớn, để tránh các vấn đề họ sử dụng dân chủ đại diện, khi một nhóm “đại biểu” riêng biệt được chọn trong số tất cả mọi người, những người này giải phóng những người còn lại khỏi gánh nặng lựa chọn. Nhưng để trở thành một cấp phó như vậy là khá khó khăn và người trở thành cấp phó không nhất thiết phải là người trung thực và đáng kính như đối với cử tri.

Để giải quyết vấn đề của cả hai hệ thống, Brian Ford đã đề xuất khái niệm dân chủ lỏng. Trong hệ thống như vậy, mọi người đều có quyền tự do lựa chọn vai trò người dùng thông thường hoặc đại biểu, chỉ bằng cách bày tỏ mong muốn của mình. Bất kỳ ai cũng có thể biểu quyết độc lập hoặc biểu quyết cho đại biểu về một hoặc nhiều vấn đề. Một đại biểu cũng có thể bỏ phiếu của mình. Hơn nữa, nếu đại biểu không còn phù hợp với cử tri thì có thể rút phiếu bầu bất cứ lúc nào.

Ví dụ về việc sử dụng nền dân chủ lỏng được tìm thấy trong chính trị và chúng tôi muốn triển khai một ý tưởng tương tự để sử dụng hàng ngày cho mọi loại người. Tại cuộc thi hackathon DevDays tiếp theo, chúng tôi quyết định viết bot Telegram để bỏ phiếu theo các nguyên tắc dân chủ lỏng lẻo. Đồng thời, tôi muốn tránh một vấn đề thường gặp với những bot như vậy - làm tắc nghẽn cuộc trò chuyện chung do tin nhắn từ bot. Giải pháp là mang càng nhiều chức năng càng tốt vào cuộc trò chuyện cá nhân.

Hackathon DevDays'19 (phần 1): nhật ký với các khuyến nghị, công cụ tạo lộ trình đi bộ và nền dân chủ lỏng lẻoĐể tạo bot này, chúng tôi đã sử dụng API từ Telegram. Cơ sở dữ liệu PostgreSQL đã được chọn để lưu trữ lịch sử biểu quyết và ủy quyền. Để giao tiếp với bot, máy chủ Flask đã được cài đặt. Chúng tôi chọn những công nghệ này vì... chúng tôi đã có kinh nghiệm tương tác với họ trong quá trình học thạc sĩ. Công việc trên ba thành phần của dự án—cơ sở dữ liệu, máy chủ và bot—đã được phân phối thành công giữa các thành viên trong nhóm.

Tất nhiên, ba ngày là một khoảng thời gian ngắn, vì vậy trong cuộc thi hackathon, chúng tôi đã triển khai ý tưởng ở cấp độ nguyên mẫu. Do đó, chúng tôi đã tạo một bot chỉ ghi vào cuộc trò chuyện chung thông tin về việc mở cuộc bỏ phiếu và kết quả ẩn danh của nó. Khả năng bỏ phiếu và tạo cuộc thăm dò được thực hiện thông qua thư từ cá nhân với bot. Để bỏ phiếu, hãy nhập lệnh hiển thị danh sách các vấn đề cần được chú ý trực tiếp. Trong thư từ cá nhân, bạn có thể xem danh sách các đại biểu và phiếu bầu trước đó của họ, đồng thời đưa ra phiếu bầu của bạn cho họ về một trong các chủ đề.

Video với ví dụ về công việc.

Thật thú vị khi thực hiện dự án, chúng tôi ở lại trường đại học cho đến nửa đêm, chúng tôi nghĩ rằng đây là một cách tuyệt vời để nghỉ học, mặc dù nó rất mệt mỏi. Đó là một trải nghiệm thú vị khi làm việc trong một nhóm gắn kết chặt chẽ.

Tái bút. Đã có tuyển sinh cho chương trình thạc sĩ cho năm học tiếp theo đang mở... Tham gia với chúng tôi!

Nguồn: www.habr.com

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