สวัสดีฮับ เราจัดงานแฮ็คกาธอนภายในครั้งแรกอย่างเป็นธรรมชาติ ฉันตัดสินใจแบ่งปันความเจ็บปวดและข้อสรุปเกี่ยวกับการเตรียมตัวสำหรับสิ่งนี้ใน 2 สัปดาห์กับคุณ รวมถึงโปรเจ็กต์ที่กลายเป็นจริง
ส่วนที่น่าเบื่อสำหรับผู้สนใจด้านการตลาด
ฉันจะเริ่มต้นด้วยเรื่องราวเล็กๆ น้อยๆ
ต้นเดือนเมษายน งานแฮ็กกาธอนชุมชน MskDotNet ครั้งแรกเกิดขึ้นในสำนักงานของเรา Battle of Tatooine กำลังดำเนินไปอย่างเต็มรูปแบบในกาแล็กซีของเราในครั้งนี้ วันเสาร์. 20 ทีม พิซซ่า. ทุกอย่างจริงใจมาก (
ฉันกำลังแบ่งปันความสุขของฉันใน Slack และความคิดนี้ก็เข้ามาในใจ: "เราจำเป็นต้องทำแฮ็กกาธอนของเราเอง" ฉันกำลังเขียนถึงสถานีบริการ Sasha ของเรา ความเงียบ.
เช้า. ฉันดื่มกาแฟในออฟฟิศ ฉันเห็นซาช่าเข้ามาจากด้านหลัง “ลิซ่า นี่มันเยี่ยมมาก! เรามีวันสำคัญในวันที่ 21 เมษายน มาทำกันเถอะ!" ว้าย!? เร็วมาก? เอ? อะไร ฉันต้องบินไป Syktyvkar เพื่อฝึกงานกลางเดือนเมษายน และลงนรกด้วย! เอาล่ะ
เหลือเวลาอีก 2 สัปดาห์ ฉันไม่เคยเป็นผู้จัดงานแฮ็กกาธอนแต่เพียงผู้เดียว ปล่อยให้มันเป็นเรื่องภายใน ฉันอ่านบทความในหัวข้อนี้ ยาก. ต้องใช้เวลาหลายเดือน จำเป็นต้องมีคนหลายคน คุณต้องคิดถึงสินค้า รางวัล เงื่อนไข ตารางดอกเบี้ย ทำความเข้าใจเป้าหมาย งบประมาณ หรืออาจค้นพบความหมายของชีวิตด้วยซ้ำ ฉันจะมาไม่ทันแน่นอน และขณะที่คุณกำลังอ่านและเตรียมตัว ผ่านไปหนึ่งสัปดาห์แล้ว ถึงเวลาที่จะลืมบทความและเริ่มทำอะไรบางอย่าง
ดูรายการตรวจสอบของเราสำหรับการจัดงานแฮ็กกาธอนภายใน 1 สัปดาห์
- แผนการ: คุณนั่งลงอย่างสงบและเขียนรายการสิ่งที่ต้องทำสำหรับแฮ็กกาธอน นาที 30.
- งาน: ผู้เข้าร่วมเสนอและเลือกโครงการที่ต้องการสร้างใน Google ชีต งานเบื้องหลัง 2 ชั่วโมง.
- กำหนด: บนเข่าของคุณคุณเขียนการแบ่งเวลาสั้น ๆ โดยคำนึงถึงการพัก 3 ครั้งและรอบชิงชนะเลิศ นาที 20.
- Команды: เผยแพร่ข้อความเกี่ยวกับแฮ็กกาธอนพร้อมกำหนดการจากสถานีบริการในช่องไอทีใน Slack/mail/etc และสร้างช่องทางแยกต่างหากสำหรับแฮ็กกาธอน ในนั้นทุกคนจะถูกแบ่งออกเป็นทีม และผู้ที่ยังไม่แน่ใจจะทำสิ่งนี้ในช่วง 5 นาทีแรกของแฮ็กกาธอน งานเบื้องหลัง 2 ชั่วโมง.
- ขนมปัง: คุณคิดสินค้ากับนักพัฒนาสองคน มอบให้นักออกแบบเพื่อเรนเดอร์ และรับสินค้าให้พร้อม งานเบื้องหลัง 3 วัน.
- แฮ็กกาธอน: คุณมาที่ออฟฟิศ ประสานงานกับทุกคนตั้งแต่เริ่มต้น ทำธุรกิจของคุณ อ่าน Reddit ที่สำคัญประกาศทุกเบรกเกี่ยวกับพิซซ่าสดใหม่ ถ่ายรูปพระอาทิตย์ตกดิน ประกาศรอบสุดท้าย โหวตร่วมกันและเลือกผู้ชนะ วัน 1.
- ใต้เครื่องหมายดอกจัน: แน่นอน คุณคิดอยู่เสมอว่าทุกอย่างจะผ่านไปได้ด้วยดี แน่นอนว่าไม่ใช่ทุกคนจะเห็นข้อความของคุณ และเป็นการดีกว่าที่จะพูดคุยกับบางคนต่อหน้า แน่นอนถ้ามีคนช่วยคุณทุกอย่างจะง่ายขึ้น 2 เท่า (Alena ที่ยอดเยี่ยมช่วยฉัน)
ส่วนที่น่าเบื่อน้อยกว่าเกี่ยวกับวันที่แฮ็กกาธอน
ทำไมต้องเป็นวันที่ 21 เมษายน? วันนี้มีความสำคัญสำหรับเรา เมื่อหนึ่งปีที่แล้ว ในวันที่ 21 เมษายน เราตกอยู่ภายใต้ภาระงานในช่วงสุดสัปดาห์แรกหลังจากเริ่มแคมเปญโฆษณาของรัฐบาลกลาง วันรุ่งขึ้น วันอาทิตย์ ทีมงานของเราเข้าทำงานตั้งแต่ 8 น. จากนั้นเราก็สร้างกระดาน Sundayhackathon ใน Trello และเริ่มงานกะหนึ่งสัปดาห์ วันละ 12 ชั่วโมง สถานการณ์วิกฤติมากจนเราไม่มีเวลากินข้าวด้วยซ้ำ และถูกคนจากทีมอื่นเลี้ยงมา
สามารถอ่านเรื่องราวแบบละเอียดเพิ่มเติมได้ที่
ในปีนี้ เราตัดสินใจว่างานนี้คุ้มค่าที่จะคงอยู่ในความทรงจำของลูกหลาน และตามประเพณีที่ดีที่สุด เราได้จัดงานแฮ็กกาธอนภายในครั้งแรกในประวัติศาสตร์ Dodo ซึ่งกินเวลา 10 ชั่วโมง
ส่วนที่น่าเบื่อที่สุดเกี่ยวกับโปรเจ็กต์แฮ็กกาธอน
ข้อจำกัดความรับผิดชอบ: คำอธิบายทั้งหมดเขียนโดยพวกผู้ชายเอง ดังนั้นการประพันธ์ข้อความจึงไม่ใช่ของฉัน
การเรียนรู้ Oleg (การเรียนรู้ของเครื่อง)
ดิมา คอชเนฟ, ซาชา แอนโดรนอฟ (@alexandronov)
พวกเขาต้องการสร้างโครงข่ายประสาทเทียมที่จะกำหนดประเภทของพิซซ่าในภาพถ่ายโดยไม่ต้องมีความรู้ใดๆ ด้วยเหตุนี้ เราจึงสร้างพิซซ่าที่เรียบง่ายและเล่นได้ โดยสามารถจำพิซซ่าได้ 10 ถาด เราคร่าวๆ แล้วว่าทุกอย่างทำงานอย่างไรในหนึ่งวัน (~10 ชั่วโมง)
โดยเฉพาะอย่างยิ่ง เราตระหนักดีว่าอุตสาหกรรมได้มาถึงระดับที่นักพัฒนาทั่วไปสามารถใช้ไลบรารีสำเร็จรูป อ่านเอกสารประกอบ และฝึกอบรมโครงข่ายประสาทเทียมของเขาโดยไม่ต้องมีความรู้เชิงลึกเกี่ยวกับเรื่องนี้ และมันจะทำงานได้ดีพอที่จะแก้ไขปัญหาที่แท้จริงได้
เครื่องมือที่ใช้:
รูปภาพ — ไลบรารี่ที่สะดวกและเรียบง่ายสำหรับการทำงานกับแมชชีนเลิร์นนิงและคอมพิวเตอร์วิทัศน์- เราลองสองรุ่น - ResNet50, Yolo
- แน่นอนว่าโค้ดนี้เขียนด้วยภาษา Python
เรามีรูปถ่าย 11000 รูป แต่เกือบ 3/4 รูปกลายเป็นขยะ และที่เหลือมีมุมที่แตกต่างกันและไม่เหมาะสม ด้วยเหตุนี้ เราจึงใช้โมเดลสำเร็จรูป (ซึ่งแค่รู้วิธีหาพิซซ่า) และด้วยความช่วยเหลือนี้ เราจึงแยกขยะ จากนั้นชื่อของรูปภาพก็รวมชื่อของพิซซ่าด้วย - ดังนั้นเราจึงจัดเรียงมันลงในโฟลเดอร์ แต่ปรากฎว่าชื่อไม่ตรงกับความเป็นจริงและเราต้องทำความสะอาดด้วยมือของเรา ในที่สุดก็มีรูปถ่ายเหลืออยู่ประมาณ 500-600 รูป เห็นได้ชัดว่านี่เป็นจำนวนเล็กน้อย แต่ถึงกระนั้น ก็เพียงพอแล้วที่จะแยกพิซซ่า 10 ชิ้นออกจากกัน
เพื่อฝึกฝนระบบกริด เราใช้เครื่องเสมือนที่ถูกที่สุดใน Azure บน NVIDIA Tesla K80 พวกเขาฝึกฝนมันมาเป็นเวลา 100 ยุค แต่ก็ชัดเจนว่าเครือข่ายมีความอิ่มตัวมากเกินไปหลังจาก 50 ยุค เนื่องจากมีชุดข้อมูลขนาดเล็ก
จริงๆ แล้วปัญหาทั้งหมดคือการไม่มีข้อมูลที่ดี
เราอาจสับสนคำศัพท์เล็กน้อย แต่เราต้องคำนึงว่าเราไม่มีประสบการณ์ในการทำงานกับเรื่องทั้งหมดนี้เลย
GUI สำหรับ NOOBS (คอนโซลสำหรับการสั่งพิซซ่า)
มิชา คูมาเชฟ (
เราได้รวบรวมต้นแบบของแอปพลิเคชันคอนโซลสำหรับ geeks ไว้ด้วยกัน ซึ่งคุณสามารถสั่งพิซซ่าผ่านเทอร์มินัลหรือบรรทัดคำสั่ง หรือแม้แต่รวมเข้ากับไปป์ไลน์การใช้งาน และเมื่อเผยแพร่สำเร็จ เราก็ส่งพิซซ่าไปที่สำนักงานได้
งานถูกแบ่งออกเป็นหลายส่วน: เราพบว่า API สำหรับแอปพลิเคชันมือถือทำงานอย่างไร และรวบรวม CLI ของเราเองโดยใช้
โปรแกรมสูงสุดของเราสำหรับแฮ็กกาธอนคือการสั่งพิซซ่าถึงออฟฟิศผ่าน CLI ของเรา เราวิ่งทุกอย่างบนม้านั่งทดสอบหลายสิบครั้ง แต่มือของฉันยังคงสั่นเมื่อฉันป้อนคำสั่งในการผลิต
ในที่สุดเราก็ทำได้!
CourierGo
Anton Bruzhmelev (ผู้เขียน), Vanya Zverev, Gleb Lesnikov (
เรานำแนวคิดของ "App for Courier" มาใช้
ความเป็นมาเกี่ยวกับการเตรียมตัวตอนแรกฉันสงสัยว่าแอปพลิเคชันจะมีฟีเจอร์ประเภทใดได้บ้าง รายการฟังก์ชันการทำงานต่อไปนี้เกิดขึ้น:
- แอปพลิเคชันจะเข้าสู่ระบบลงทะเบียนเงินสดในการจัดส่งโดยใช้รหัส
- แอปพลิเคชันจะแสดงคำสั่งซื้อที่มีอยู่และคำสั่งซื้อที่ต้องดำเนินการทันที
- ผู้จัดส่งบันทึกคำสั่งซื้อและนำติดตัวไปในการเดินทาง
- เขาจะแสดงเวลาโดยประมาณและไม่ว่าเขาจะตรงเวลาหรือไม่ก็ตาม
- แสดงให้ลูกค้าเห็นว่าผู้จัดส่งออกไปแล้ว
- ลูกค้าเริ่มแสดงจุดจัดส่งบนแผนที่และเวลาโดยประมาณ
- ผู้จัดส่งสามารถเขียนถึงลูกค้าในการแชทจากแอปพลิเคชัน
- ลูกค้าสามารถเขียนถึงผู้จัดส่งผ่านการแชทจากแอปพลิเคชัน
- ห้านาทีก่อนมาถึง ลูกค้าจะได้รับข้อความแจ้งว่าเจ้าหน้าที่จัดส่งใกล้ถึงแล้ว เตรียมพร้อม
- ผู้จัดส่งบันทึกในใบสมัครว่าเขามาถึงแล้วและกำลังรออยู่
- ผู้ให้บริการจัดส่งโทรจากแอปพลิเคชันได้ด้วยคลิกเดียวและรายงานว่า (กำลังเพิ่มขึ้นมาถึงแล้ว ฯลฯ )
- ลูกค้ายอมรับคำสั่งซื้อและป้อนรหัส PIN จากแอปพลิเคชันหรือ SMS เพื่อยืนยันการจัดส่ง (เป็นลายเซ็น) เพื่อให้ผู้จัดส่งไม่สามารถดำเนินการจัดส่งล่วงหน้าได้หากล่าช้า
- คำสั่งซื้อถูกทำเครื่องหมายว่าจัดส่งแล้วในระบบ
บวกกับสถานการณ์ทางเลือกอีกสองสามประการ:
- ผู้จัดส่งสามารถทำเครื่องหมายคำสั่งซื้อว่ายังไม่ได้จัดส่งและเลือกเหตุผลได้
- หากคุณมาสาย พนักงานจัดส่งสามารถออกใบรับรองอิเล็กทรอนิกส์ผ่าน SMS ได้ในปุ่มเดียว หรือใบรับรองจะมาถึงโดยอัตโนมัติหากไม่ตรงตามกำหนดเวลาการส่งมอบ
แน่นอนว่าความรู้สึกถึงคำมั่นสัญญาและความจำเป็นของโครงการนี้ช่างมีพลัง
วันรุ่งขึ้นเราไปรับประทานอาหารกลางวันกับทีมและพูดคุยกันว่าฟังก์ชันการทำงานขั้นต่ำของแอปพลิเคชันจะเป็นอย่างไร
ด้วยเหตุนี้ จึงได้มีการจัดทำรายการสิ่งที่ต้องทำในงาน Hackathon ดังต่อไปนี้:
- เข้าสู่ระบบลงทะเบียนเงินสดในการจัดส่ง
- แสดงตำแหน่งปัจจุบัน
- ส่งข้อมูลไปยัง API ภายนอก (พิกัด รับคำสั่งซื้อ จัดส่งคำสั่งซื้อ)
- รับข้อมูลจาก API ภายนอก (คำสั่งจัดส่งปัจจุบัน)
- ส่งเหตุการณ์ที่ระบุว่าคุณได้รับคำสั่งซื้อสำหรับการจัดส่ง/จัดส่งแล้ว
- แสดงตำแหน่งปัจจุบันของผู้จัดส่งบนแผนที่บนเว็บไซต์
ดูเหมือนว่างานหลักคือการสร้างแบ็กเอนด์แอปพลิเคชันเอง (หลังจากการหารือเราเลือก ReactNative เพื่อพัฒนาแอปพลิเคชันหรือค่อนข้างเป็นกรอบงานสำหรับมัน -
ฉันตัดสินใจลองสร้างพื้นที่เก็บข้อมูลที่ใช้งานได้สำหรับโครงการทันที เมื่อเวลา 12 น. ฉันพบว่าการระบุตำแหน่งทางภูมิศาสตร์ในพื้นหลังทำงานได้ไม่ดีใน ReactNative หากคุณไม่ได้เขียนโค้ดเนทีฟฉันก็หงุดหงิดเล็กน้อย จากนั้นฉันก็ปล่อยมือไปเมื่อรู้ว่าฉันกำลังอ่านเอกสารที่ไม่ใช่ของเฟรมเวิร์ก expo.io แต่เป็นของ ReactNative เป็นผลให้ในช่วงเย็นฉันเข้าใจวิธีรับตำแหน่งปัจจุบันใน expo.io และวาดหน้าจอแยกกัน (สำหรับการเข้าสู่ระบบ การแสดงคำสั่ง ฯลฯ)
ในตอนเช้าที่งานแฮ็กกาธอน พวกเขาล่อลวง Gleb ให้เข้าร่วมโปรเจ็กต์ที่มีแนวโน้มดีของพวกเขา พวกเขาจึงวางแผนสิ่งที่ต้องทำอย่างรวดเร็ว
เราทำผิดพลาดเมื่อเราพยายามสื่อสารไม่ใช่ผ่าน HTTP แต่ผ่าน GRPC ตามเทมเพลตโครงการ เนื่องจากไม่มีใครรู้วิธีสร้างไคลเอ็นต์ GRPC สำหรับ JavaScript ในที่สุด หลังจากใช้เวลาประมาณหนึ่งชั่วโมงครึ่งกับเรื่องนี้ เราก็ละทิ้งความคิดนี้ ด้วยเหตุนี้ พวกที่อยู่ด้านหลังจึงเริ่มสร้างเซิร์ฟเวอร์ที่เสร็จสมบูรณ์จาก GRPC เป็น WebApi ใหม่ หลังจากครึ่งชั่วโมง ในที่สุดเราก็สามารถตั้งค่าการสื่อสารระหว่างแอปพลิเคชันและแบ็กเอนด์ได้ ดูเถิด แต่ในขณะเดียวกัน Gleb ก็เกือบจะเสร็จสิ้นการปรับใช้ไปยัง k8s และบวกกับการปรับใช้อัตโนมัติของคอมมิตกับต้นแบบด้วย 🙂
เราเลือก MySQL เป็นที่จัดเก็บข้อมูลเพื่อไม่ให้เสี่ยงกับฐานข้อมูลเป็นอย่างน้อย (เรามีความคิดเกี่ยวกับ CosmosDb)
ในสรุป:
- ดำเนินการบันทึกพิกัดปัจจุบันของผู้จัดส่งจากแอปพลิเคชันไปยังฐานข้อมูล
- เราติดตั้ง RabbitMQ และสมัครรับข้อความเกี่ยวกับผู้จัดส่งที่รับคำสั่งซื้อ เพื่อแสดงคำสั่งซื้อจากผู้จัดส่งในแอปพลิเคชันทันที
- เราเริ่มประหยัดเวลาในการจัดส่งคำสั่งซื้อลงในฐานข้อมูลของเราหลังจากที่ผู้จัดส่งกดปุ่มในแอปพลิเคชัน เราไม่มีเวลาเพิ่มการส่งเหตุการณ์กลับไปยังการหักบัญชีที่ส่งคำสั่งซื้อแล้ว
- ฉันแสดงแผนที่ในหน้าคำสั่งซื้อปัจจุบันบนเว็บไซต์พร้อมตำแหน่งปัจจุบันของผู้จัดส่ง แต่ฟังก์ชันนี้ยังไม่สมบูรณ์เล็กน้อย เนื่องจากไม่สามารถกำหนดค่า CORS ในสภาพแวดล้อมเพื่อรับพิกัดจากบริการใหม่ของเราได้
M87
โรมา บูกิน, โกชา โปลวอย (
เราต้องการใช้ผู้ให้บริการ OpenID Connect เนื่องจากในขณะนี้เราใช้โปรโตคอลการตรวจสอบความถูกต้องตามการออกแบบของเราเอง และสิ่งนี้ทำให้เกิดปัญหาหลายประการ: ไลบรารีไคลเอนต์แบบกำหนดเอง งานที่ไม่สะดวกในส่วนของพันธมิตรภายนอก ปัญหาด้านความปลอดภัยที่อาจเกิดขึ้น (หลังจากทั้งหมด , OAuth2.0 และ OpenID Connect ในการใช้งานอ้างอิงถือว่าปลอดภัย แต่ฉันไม่แน่ใจเกี่ยวกับโซลูชันของเรา)
เราได้จัดทำบริการแยกต่างหากที่จำลองบริการสำหรับการจัดเก็บข้อมูลส่วนบุคคลเพื่อสร้างแบบจำลอง Country-Agnostic ขนาดเล็กของผู้ให้บริการตรวจสอบสิทธิ์ที่จะไปยังบริการแยกต่างหากสำหรับข้อมูลส่วนบุคคล (ซึ่งในอนาคตจะทำให้สามารถใช้บริการเดียวกับ ซึ่งสามารถเข้าสู่ระบบด้วยการลงทะเบียนบัญชีในประเทศใดก็ได้ และในขณะเดียวกันก็ปฏิบัติตาม GDPR และกฎหมายของรัฐบาลกลางอื่น ๆ) เราทำส่วนนี้เช่นเดียวกับผู้ให้บริการ และเชื่อมโยงผู้ให้บริการเข้าด้วยกันได้สำเร็จ ถัดไป จำเป็นต้องสร้าง API ที่จะได้รับการปกป้องโดยโทเค็นที่ออกโดยผู้ให้บริการ สนับสนุนการวิปัสสนาผ่านผู้ให้บริการ และส่งคืนข้อมูลที่ได้รับการป้องกันหากคำขอเป็นไปตามนโยบายการอนุญาต (เราตรวจสอบว่าผู้ใช้ได้รับการรับรองความถูกต้องตามโครงการ Bearer โทเค็นของเขามีขอบเขตที่แน่นอน + y ผู้ใช้เองมีสิทธิ์ที่อนุญาตให้โทรได้) ส่วนนี้ก็เสร็จสมบูรณ์เช่นกัน องค์ประกอบสุดท้ายคือไคลเอ็นต์ JavaScript ซึ่งจะได้รับโทเค็น โดยจะเรียกใช้ API ที่มีการป้องกัน เราไม่มีเวลาทำส่วนนี้ นั่นคือส่วนที่ใช้งานได้ทั้งหมดพร้อมแล้ว แต่ส่วนหน้าไม่พร้อมที่จะสาธิตการทำงานของทั้งระบบ
อี-อี-อี (ของเล่น)
ดิมา อาฟอนเชนโก, ซาชา โคโนวาลอฟ
เราทำของเล่นชิ้นเล็กๆ บน Yunka โดยที่มือขี้เล่นโยนไส้กรอกลงบนพิซซ่า หากคุณใส่ไส้กรอกไม่ถูกต้อง ข้อความ “ถูกปฏิเสธ” ที่น่าเศร้าจะปรากฏขึ้นบนหน้าจอ และหากใส่ไส้กรอกทั้งหมดอย่างถูกต้อง ข้อเท็จจริงแบบสุ่มเกี่ยวกับพิซซ่าจะปรากฏขึ้น
เราต้องการสร้างระดับที่สองด้วยการขว้างมะเขือเทศ แต่เราไม่มีเวลา
ความต่อเนื่องสั้น ๆ : ใครชนะ?
ก่อนงานแฮ็กกาธอน เราได้พูดคุยกับหนุ่มๆ แล้วถามว่าพวกเขาต้องการได้รับรางวัลอะไรหากพวกเขาชนะ ปรากฎว่ารางวัลที่มีค่าที่สุดน่าจะเป็น "ถนนสู่อาหาร"
ดังนั้นคาดว่าเราจะประกาศเกมด้วยมือที่ใส่พริกบนพิซซ่าเร็ว ๆ นี้
ดังที่ผู้อ่านที่ตั้งใจอาจสังเกตเห็น ทีม “E-E-E (ของเล่น)” ได้รับรางวัล ขอแสดงความยินดีด้วย!
เฉพาะผู้ใช้ที่ลงทะเบียนเท่านั้นที่สามารถเข้าร่วมในการสำรวจได้
โครงการไหนที่คุณชอบที่สุด?
-
การเรียนรู้ Oleg (การเรียนรู้ของเครื่อง)
-
GUI สำหรับ NOOBS
-
CourierGo
-
M87
-
อี-อี-อี
ผู้ใช้ 5 คนโหวต ผู้ใช้ 3 รายงดออกเสียง
ที่มา: will.com