Kodim-pizza

Merhaba Habr. Kendiliğinden ilk şirket içi hackathon'u gerçekleştirdik. 2 hafta süren hazırlık sürecimin acılarını, çıkardığım sonuçları ve ortaya çıkan projeleri sizlerle paylaşmaya karar verdim.

Kodim-pizza

Pazarlamayla ilgilenenler için sıkıcı kısım

Küçük bir hikayeyle başlayacağım.

Nisan başı. Ofisimiz ilk MskDotNet Topluluğu hackathon'una ev sahipliği yapıyor. Tatooine savaşı bu sefer galaksimizde tüm hızıyla devam ediyor. Cumartesi. 20 takım. Pizza. Hepsi çok duygulukanıt). Şişirilebilir bir R2-D2 odanın etrafında beliriyor. Takımlar haritadaki en tehlikeli yarışı geçmek için en doğru algoritmaları yazarlar. İlk yarışların lansmanını erteliyoruz. Kurabiye ve kahve tasarrufu. Organizatörler ve ben, cumartesi günü öğle yemeğinden sonra pek çok kişinin ayrılacağını bekliyorduk. Ama hayır. 12 saatlik kodlama geride kaldı. Son. Bir şeyler düşüyor, bir şeyler başlamıyor. Ama herkes mutlu. Takımımız kazanır. İki kat mutluyuz.

Sevincimi Slack'te paylaşıyorum ve aklıma şu fikir geliyor: "Kendi hackathonumuzu yapmalıyız." Servis istasyonumuz Sasha'ya yazıyorum. Sessizlik.

Sabah. Kahvemi ofiste içerim. Sasha'nın arkadan yaklaştığını görüyorum. "Lisa, bu harika! 21 Nisan bizim için önemli bir tarih. Hadi yapalım! O NE LAN!? Çok hızlı? A? Ne? Nisan ortasında staj için Syktyvkar'a uçmam gerekiyor. Evet, canı cehenneme! Haydi.

2 hafta kaldı. Hiçbir zaman bir hackathonun tek organizatörü olmadım. Let ve dahili. Bu konuyla ilgili makaleler okudum. Teneke. Birkaç ay sürer. Birkaç kişiye ihtiyaç var. Ürünleri, ödülleri, koşulları, programı düşünmeniz, ilgilenmeniz, hedefi ve bütçeleri anlamanız gerekir. Ve belki de hayatın anlamını bile anlayabilirsin. Kesinlikle başaramayacağım. Ve siz okuyup hazırlanırken bir hafta çoktan geçmişti. Makalelerden puan almanın ve bir şeyler yapmaya başlamanın zamanı geldi.

1 haftalık dahili hackathon kontrol listemize göz atın

  • Plan: Sakince oturun ve hackathon için yapılması gerekenlerin bir listesini yazın. 30 dakika.
  • Görev: Katılımcılar Google E-Tablolar'da oluşturmak istedikleri projeleri kendileri önerir ve seçerler. Arka plan görevi, 2 saat.
  • Program: Dizinizin üzerine 3 molayı ve finali hesaba katarak kısa bir süre dökümü yazarsınız. 20 dakika.
  • Takımlar: Slack/mail/etc'deki BT kanallarında servis istasyonundan bir program içeren bir hackathon hakkında bir mesaj yayınlayın ve hackathon için ayrı bir kanal oluşturun. İçinde herkes takımlara ayrılıyor ve kararsızlar bunu hackathon'un ilk 5 dakikasında yapıyor. Arka plan görevi, 2 saat.
  • Çörekler: İki geliştiriciyle birlikte ürün hazırlıyorsunuz, onu render için tasarımcıya veriyorsunuz ve hazır hale getiriyorsunuz. Arka plan görevi, 3 gün.
  • Hackathon: ofise geliyorsunuz, başlangıçta herkesi koordine ediyorsunuz, işinizi yapıyorsunuz, Reddit okuyorsunuz, en önemlisi taze pizzayla ilgili her molayı rapor ediyorsunuz, gün batımını fotoğraflıyorsunuz, finali duyuruyorsunuz, birlikte oy veriyorsunuz ve kazananı seçiyorsunuz. 1 gün.
  • Yıldız işaretinin altında: Elbette sürekli her şeyin yolunda gittiğini düşünüyorsunuz. Elbette mesajınızı herkes görmeyecektir ve bazılarıyla şahsen konuşmak daha iyidir. Elbette birisi size yardım ederse her şey 2 kat daha kolay hale gelecektir (harika Alena bana yardım etti).

Hackathon tarihinin daha az sıkıcı kısmı

Neden 21 Nisan? Bu gün bizim için anlamlıdır. Tam olarak bir yıl önce, 21 Nisan'da, Federal Reklam Kampanyası'nın başlamasından sonraki ilk hafta sonunda yük altına girdik. Ertesi gün Pazar günü ekibimiz sabah 8'den itibaren işteydi. Daha sonra Trello'da pazar hackathon panosunu oluşturduk ve bir hafta boyunca günde 12 saat vardiyalı çalışmaya başladık. Durum o kadar kritikti ki yemek yemeye bile vaktimiz yoktu ve diğer takımlardan adamlar tarafından besleniyorduk.

Kodim-pizza

Daha ayrıntılı bir hikayeyi şu adreste okuyabilirsiniz: Fyodor Ovchinnikov'un sayfası (CEO'muz). O zamandan beri çok değiştik ama artık tarihi kesinlikle unutmayacağız.

Bu yıl bu etkinliğin gelecek nesillerin anısına ölümsüzleştirilmesi gerektiğine karar verdik ve en iyi geleneklere uygun olarak Dodo tarihinde 10 saat süren ilk dahili hackathon'u düzenledik.

Hackathon projelerinin en sıkıcı kısmı

Yasal Uyarı: tüm açıklamalar bizzat adamlar tarafından yazılmıştır, dolayısıyla metnin yazarlığı bana ait değildir.

Oleg Lerning (makine öğrenimi)

Dima Kochnev, Sasha Andronov (@alexandronov)

Fotoğraftaki pizzanın türünü hiçbir bilgi olmadan belirleyecek bir sinir ağı yapmak istedik. Sonuç olarak, çok basit ve oyuncak bir tane yaptılar - 10 pizzayı tanıyor, kabaca her şeyin nasıl çalıştığını bir günde mümkün olduğunca (~ 10 saat) çözdü.

Kodim-pizza

Özellikle sektörün, sıradan bir geliştiricinin, konu hakkında derinlemesine bilgi sahibi olmadan, hazır kütüphaneleri alıp, dokümantasyonu okuyabilir ve kendi sinir ağını eğitebilecek bir seviyeye ulaştığını fark ettik. Ve gerçek sorunları çözmeye yetecek kadar işe yarayacaktır.

Kullanılan aletler:

  • görüntü makine öğrenimi ve bilgisayarlı görme ile çalışmak için kullanışlı ve basit bir kütüphanedir.
  • Modeller iki tanesini denedi: ResNet50, Yolo.
  • Kod elbette python ile yazılmıştı.

11000 fotoğrafımız vardı, ancak bunların neredeyse 3/4'ünün çöp olduğu ve geri kalanının farklı, uygunsuz açılardan olduğu ortaya çıktı. Sonuç olarak, hazır bir model aldık (pizzayı nasıl bulacağını bilen) ve onun yardımıyla çöpü ayırdık. Ayrıca fotoğrafın adı pizzanın adıydı - bu yüzden onu klasörlere ayırdık, ancak isimlerin gerçekle eşleşmediği ortaya çıktı ve burada onu ellerimizle temizlemek zorunda kaldık. Sonuçta 500-600 civarında fotoğraf kaldı, bunun önemsiz bir miktar olduğu açık ama yine de 10 pizzayı birbirinden ayırmaya yetti.

Izgarayı eğitmek için Azure'daki en ucuz sanal makineyi NVIDIA Tesla K80'de aldık. 100 çağda eğitildi, ancak küçük bir veri kümesinin olması nedeniyle ağın 50 çağdan sonra aşırı doygunluğa ulaştığı açıktı.

Aslında tüm sorun iyi verilerin olmayışıdır.

Kodim-pizza

Biraz kafamız karışmış olabilir ama genel olarak tüm bu vakalarla çalışma konusunda hiçbir deneyimimiz olmadığını aklımızda tutmalıyız.

NOOBS için GUI (pizza sipariş konsolu)

Mişa Kumaçev (Ceridan), Zhenya Bikkinin, Zhenya Vasiliev

Meraklılar için, terminal veya komut satırı aracılığıyla pizza sipariş edebileceğiniz, hatta bunu dağıtım hattına yerleştirebileceğiniz ve başarılı bir sürümden sonra ofise pizza teslim edebileceğiniz bir prototip konsol uygulaması hazırladık.

Kodim-pizza

Çalışma birkaç bölüme ayrıldı: Mobil uygulamalara yönelik API'mizin nasıl çalıştığını bulduk, kullanarak kendi CLI'mızı oluşturduk. oklif ve oluşturduğumuz paketin yayınlanmasını ayarladık. Hackathon'un sonuna doğru son görevde birkaç hoş olmayan dakika yaşandı. Bizim için her şey yerel olarak çalıştı ve hatta paketin yayınlanmış eski sürümleri bile çalıştı, ancak yenileri (daha harika özellikler ve ifadeler ekleyen) çalışmayı reddetti. Neyin yanlış gittiğini anlamak için yaklaşık 40 dakika harcadık ama sonunda her şey sihirli bir şekilde kendi kendine çalıştı).

Maksimum hackathon programımız, CLI'miz aracılığıyla ofise gerçek bir pizza siparişi vermekti. Her şeyi test tezgahında bir düzine kez çalıştırdık ama dürtükle komutları attığımda ellerim hâlâ titriyordu.

Kodim-pizza

Sonuç olarak - yine de başardık!

Kodim-pizza

KuryeGo

Anton Bruzhmelev (yazar), Vanya Zverev, Gleb Lesnikov (entropi), Andrey Sarafanov

"Kurye başvurusu" fikrini aldılar.

Hazırlık hakkında arka plan.Başlangıçta uygulamada hangi özelliklerin olabileceğini anladım? Özelliklerin bir listesi şu şekilde ortaya çıktı:

  • Uygulama, kodu kullanarak teslimat ödemesinde oturum açar.
  • Uygulama anında mevcut siparişleri, alınması gereken siparişleri gösterir.
  • Kurye siparişi not eder ve onu yolculuğa çıkarır.
  • Tahmini süre ve zamanı olup olmadığı kendisine gösterilir.
  • Müşteri kuryenin gittiğini gösterir.
  • Müşteri harita üzerinde kurye noktasını ve tahmini süreyi göstermeye başlar.
  • Kurye, uygulama üzerinden sohbet yoluyla müşteriye yazabilir.
  • Müşteri uygulama üzerinden sohbet yoluyla kuryeye yazabilir.
  • Varıştan beş dakika önce müşteri, kuryenin yaklaştığını, hazırlıklı olduğunu belirten bir mesaj alır.
  • Kurye başvuruda geldiğini ve beklediğini belirtiyor.
  • Kurye uygulamadan tek tuşla arayarak (yükseliyor, yaklaşıyor vb.)
  • Müşteri siparişi kabul eder ve uygulamadan veya SMS'den pin kodunu girerek teslimatı onaylar (imza olarak) Böylece kurye geç kalırsa teslimatı önceden tamamlayamayacaktır.
  • Sipariş sistemde teslim edildi olarak işaretleniyor.

Ayrıca birkaç alternatif senaryo:

  • Kurye siparişi teslim edilmedi olarak işaretleyebilir ve bir neden seçebilir.
  • Kurye, gecikme durumunda tek tuşla SMS yoluyla elektronik sertifika düzenleyebilir. Veya teslim süresine uyulmaması durumunda sertifika otomatik olarak gelir.

Bu projenin geleceği ve gerekliliği duygusu elbette enerji vericiydi.

Ertesi gün ekiple öğle yemeğine çıktım ve uygulamanın minimum işlevselliğinin nasıl görüneceğini tartıştım.

Sonuç olarak hackathonda yapılması gerekenlere ilişkin aşağıdaki liste oluşturuldu:

  • Teslimat ödemesine giriş yapın.
  • Geçerli konumu görüntüle.
  • Verileri harici API'ye gönderin (koordinatlar, siparişi aldı, siparişi teslim etti).
  • Harici API'den veri alın (mevcut kurye siparişleri).
  • Siparişi teslim almak / teslim etmek için aldığına dair bir etkinlik gönderin.
  • Kuryenin mevcut konumunu sitedeki harita üzerinde görüntüleyin.

Görünüşe göre asıl iş, arka ucu, yani uygulamanın kendisini oluşturmaktı (tartışmalardan sonra uygulamayı geliştirmek için ReactNative'i veya daha doğrusu onun üzerindeki bağlamayı seçtik - expo.io, hiçbir şekilde yerel kod yazmamanıza olanak tanır). Arka uç açısından, hizmet şablonumuz ve k8'lerle (hangi işi üstlendi) çalışma konusunda deneyimli olduğundan, başlangıçta Vanya Zverev için umut vardı. Ben ve Andrey Sarafanov ReactNative'den etkilendik.

Projenin kendisi için hemen çalışan bir depo oluşturmaya karar verdim. Gece saat 12’de ReactNative’de arka planda coğrafi konumun iyi çalışmadığı gerçeğiyle karşılaştım, eğer native kod yazmıyorsanız biraz hayal kırıklığına uğradım. Daha sonra expo.io çerçevesinin değil, ReactNative'in belgelerini okuduğumu fark ettiğimde bıraktım. Sonuç olarak, akşam expo.io'da mevcut konumu nasıl alacağımı ve ayrı ekranlar çizeceğimi (giriş yapma, sipariş görüntüleme vb. için) benim için zaten açıktı.

Kodim-pizza

Sabah hackathon'da Gleb'i gelecek vaat eden projelerine dahil ettiler. Hızlıca ne yapacaklarına dair bir plan yaptılar.

Kodim-pizza

JavaScript için GRPC istemcisinin nasıl oluşturulacağını kimse bilmediği için proje şablonuna uygun olarak HTTP üzerinden değil GRPC üzerinden iletişim kurmaya çalışırken hata yaptılar. Sonuç olarak yaklaşık bir buçuk saat harcadıktan sonra bu fikirden vazgeçtiler. Bu nedenle arkadaki adamlar bitmiş sunucuyu GRPC'den WebApi'ye yeniden oluşturmaya başladı. Yarım saat sonra nihayet uygulama ile arka uç arasında iletişim kurabildik. Ancak aynı zamanda Gleb, k8'lere konuşlandırmayı ve ayrıca ustaya bağlanarak otomatik konuşlandırmayı neredeyse tamamladı. 🙂

Depolama olarak en azından veritabanını riske atmamak için MySQL'i seçtik (CosmosDb ile ilgili düşünceler vardı).

Kodim-pizza

Özetle:

  • Kuryenin mevcut koordinatlarının uygulamadan veritabanına kaydedilmesi uygulandı.
  • Kuryeden gelen siparişin uygulamada anında görüntülenmesi için RabbitMQ'yu vidaladık ve siparişin kurye tarafından alındığına dair mesajlara abone olduk.
  • Uygulamada kuryenin butona basmasıyla siparişin veritabanına teslim süresinden tasarruf etmeye başladık. Siparişin teslim edildiğine dair rebbit'e bir etkinlik göndermeyi eklemek için zamanımız olmadı.
  • Sitedeki güncelsipariş sayfasında kuryenin güncel konumunun yer aldığı harita gösterimi yaptım. Ancak yeni hizmetimizden koordinatları alacak şekilde ortamdaki CORS'u yapılandırmak mümkün olmadığından bu işlevsellik biraz yarım kaldı.

M87

Roma Bukin, Gosha Polevoy (Georgepolevoy), Artyom Trofimuşkin

Şu anda kendi kimlik doğrulama protokolümüzü kullandığımızdan ve bu bazı zorluklar yarattığından bir OpenID Connect sağlayıcısı uygulamak istedik: özel istemci kitaplıkları, harici ortakların uygunsuz çalışması, muhtemelen güvenlik sorunları (sonuçta OAuth2.0 ve OpenID) Referans uygulamasındaki bağlantının güvenli olduğu düşünülebilir, ancak çözümümüzden emin değilim).

Kodim-pizza

Kişisel verileri ayrı bir hizmete aktaracak Ülkeden Bağımsız Kimlik Doğrulama sağlayıcısının küçük bir modelini oluşturmak amacıyla kişisel veri depolama hizmetini taklit eden ayrı bir hizmet yaptık (bu, gelecekte tek bir hizmetin olmasını mümkün kılacaktır). herhangi bir ülkede hesap kaydıyla giriş yapılabilir ve aynı zamanda GDPR ve diğer federal yasalara da uygun olabilir). Biz de bu kısmı tıpkı sağlayıcı gibi yaptık ve bunları başarıyla birbirine bağladık. Daha sonra, sağlayıcının yayınladığı tokenler tarafından korunacak, sağlayıcı aracılığıyla iç gözlemlerini destekleyecek ve isteğin yetkilendirme politikalarını karşılaması durumunda güvenli veriler döndürecek bir API yapmak gerekiyordu (kullanıcının kimliğinin, Taşıyıcı şeması, belirteci belirli bir kapsam içerir + kullanıcının kendisinin çağrı yapılmasına izin veren bir izni vardır). Bu kısım da tamamlandı. Son bileşen, güvenli bir API'yi çağıracak bir belirteç verilecek bir JavaScript istemcisiydi. Bu kısmı yapamadık. Yani işlevsel kısmın tamamı hazırdı ancak ön uç kısmı tüm sistemin performansını göstermeye hazır değildi.

E-E-E (oyuncak)

Dima Afonchenko, Sasha Konovalov

Hareketli ellerin pizzanın üzerine sosis koyduğu yunk üzerinde mini bir oyuncak yaptık. Sosisleri yanlış koyarsanız, ekranda üzücü bir "Reddedildi" yazısı belirir ve sosisin tamamı doğru şekilde atılırsa pizza hakkında rastgele bir gerçek ortaya çıkar.

Kodim-pizza

Domates atarak ikinci aşamayı yapmak istediler ama zamanları olmadı.

Kodim-pizza

Kısa devam filmi: Kim kazandı?

Hackathon'dan önce çocuklarla konuştuk ve kazanmaları halinde hangi ödülü almak istediklerini sordum. En değerli ödülün "dürtüye giden yol" olacağı ortaya çıktı.

Kodim-pizza

Bu nedenle yakında pizzaya biberli kalem fırlatan bir oyunun duyurusunu bizden bekleyin.

Dikkatli bir okuyucunun fark edebileceği gibi "E-E-E (oyuncak)" takımı kazandı. Tebrikler arkadaşlar!

Ankete sadece kayıtlı kullanıcılar katılabilir. Giriş yapLütfen.

En çok hangi projeyi beğendiniz?

  • Oleg Lerning (makine öğrenimi)

  • NOOBS için GUI

  • KuryeGo

  • M87

  • Uh-uh

5 kullanıcı oy kullandı. 3 kullanıcı çekimser kaldı.

Kaynak: habr.com

Yorum ekle