Tired of outsourcing? Get hired at a top product startup from Silicon Valley 🚀
×Закрыть

Google Summer of Code 2017. Студентський звіт

Всім привіт. Я студент і цим літом я приймав участь в програмі від Google і в цій статті я розповім як це було.
Але спочатку — чому варто йти на цю програму:

  • По перше — це програма від GOOGLE!;
  • Можливість попрацювати в Open Source;
  • Тобі дають ментора;
  • Дуже корисно для резюме;
  • Ти прокачуєш свої навички;
  • Тобі платять (для студентів, які вчаться в Українських університетах — 2400 доларів);
  • Після успішного завершення ти отримаєш футболку «Google Summer of Code»;
  • І найголовніше, ти отримуєш запрошення на співбесіду в гугл, який можеш використати коли захочеш.

Про програму я дізнався випадково від Тараса, коли ми з ним кодили свій Spring на курсах в EPAMі і судячи із статистики не багато людей в Україні в курсі про існування цієї програми. Отож, я приєднався досить пізно, десь у кінці березня, коли ватага індусів вже встигла захопити передові позиції у боротьбі за місця в програмі.

Вибір організацій

Проглядаючи організації і їх проекти та кількість комітів від конкурентів я обрав для себе ViSP. Програма Augmented Reality (треба було зробити плагін, який дозволив би використовувати ViSP в Unity і щоб він працював під Windows, Linux та Andoid OS/IOS).

Також я відправив свою пропозицію в організацію Portland State University (тут студент сам пропонував свою ідею, яка мала бути пов’язані з hardware).
ViSP пропонував зайти на їх github, скопіювати і запустити їх проект. Також був гугл чат в якому розробники допомагали розібратися і запустити їх продукт.

У Portland State University був HTML сайт, з інформацією і електронною адресою, куди треба надсилати власні пропозиції.

Виборювання місця під сонцем

Для себе я вирішив, що попасти на ViSP більш реально, адже там було лише 5 конкурентів на моє місце.
Почав я з Issues в репозиторії проекту. Там я взяв завдання на написання туторіалу і на розширення логіки одного з класів проекту.

Після завершення роботи над завданнями я ще відчував, що цього недостатньо і запропонував організаторам дати тестові завдання, щоб виділити кращого.

Task 1:
«Indeed, it could be a good idea to implement a demo Unity plugin.
Maybe, a plugin to test the data communication between C++ and Unity: read an image from C++ and display it in Unity ? »
My Submission: github.com/...​ting_started_Unity_Plugin

Task 2:
«For the project 1, a first step will be to use Visp binaries as a Unity plugin. So here is a small code using Visp to calculate the position of a 3D point in a frame, given some camera parameters
You can try to make it work as a Unity plugin, by passing the 3D coordniates from unity scripts to the plugin. »
My Submission: github.com/...​ing_started_Unity_Plugin2

Після всіх цих завдань в живих залишилися тільки я і Арія. Я оцінив роботи свого опонента і дійшов висновку, що місце мені гарантоване.

Я відправив своє резюме попередньо узгодивши його з організаторами і передав права на свої коміти. Мені залишалося тільки дочекатися листа з зарахуванням на проект в ViSP.

Зарахування в програму

На початку травня я отримав свій лист щастя. Проте коли я відкрив свій кабінет на сторінці програми — я дуже сильно здивувався. Мене не взяли на ViSP, але взяли на Portland State University і назначили в ментори ось цього дядька Keith Packard.

Я не думав, що мене туди візьмуть, тому запропонував ідею яка мені прийшла в голову десь на другому курсі. (Відповідно ідея була зовсім не продумана).

А ідею я запропонував наступну: Створити USB флешку з можливістю приховувати та шифрувати дані на рівні мікроконтролера.

Якщо коротко. Людина підключає мою флешку в комп’ютер, їй відкривається директорія з файлами, які не приховані, вона в цій директорії створює текстовий файл зі спеціальним іменем і в ньому вписує пароль. Мікроконтролер флешки відловлює цей файл, зчитує пароль і якщо все вірно, то розшифровує приховані файли і відображає їх в директорії.

Трохи про себе. Мої основні навички пов’язані з Java Backend. З Hardware я займався тільки на першому курсі, бо було цікаво (Бавився я з AVR мікроконтролерами, останнім моїм проект було ось це творіння habrahabr.ru/sandbox/79829)

Переосмислення ідеї

Під час нашої першої розмови, Keith чесно сказав мені, що він не читав мою пропозицію, але Bart Massey (головний ментор і організатор, він же і відібрав мою ідею, за що йому спасибі) сказав, що там щось про флешки та криптографію.

Тож я переказав ідею, після чого він порадив почитати про Mass Storage Devices і USB протокол і назначив наступну сесію якраз перед офіційним стартом програми. (Для комунікації ми використовували Slack, мова — англійська)

Після прочитання відповідної документації я зрозумів, що у тому вигляді в якому я запропонував ідею є нездійсненою.

Здаватися я не хотів і почав думати, як бути. Рішенням стало наступним: розділити пам’ять флешки на кілька частин. Таким чином я отримував одну фізичну флешку в якій було декілька віртуальних флешок. Коли користувач під’єднував флешку їй відображалося перший розділ, який завжди був публічний, а коли вона створювала в цьому розділі відповідний текстовий файл з іменем прихованого розділу та паролем, мікроконтролер зчитував дані і якщо все вірно — перепід’єднував з’єднання із хостом, розшифровував розділ і вже відображав прихований розділ замість попереднього. Для шифрування ключів використав AES, а для розшифрування блоків даних розділив використав XOR.

Під час наступної нашої розмови я виклав йому свою вдосконалену ідею. Він, в свою чергу, запропонував ще дві свої (MTP — прилад і Mass Storage Device + HID — щоб вводити пароль на стороні хоста). Але я вирішив реалізувати свою, бо вона більш відповідала попередньому плану, також зі сторони хоста прилад виглядав, як звичайна флешка без додаткового функціоналу.

Для реалізації проекту ментор назначив мікроконтролер STM32, а для написання прошивки я використав STM32Cube.
Проект: github.com/...​a/Double_Bottom_USB_Stick

Розклад

Від себе можу сказати, що працювати та приймати участь в програмі досить важко. (По умовах програми ти маєш працювати над проектом 40 годин на тиждень). Тому літом у мене був наступний розклад: рано вранці встаєш, 5 годин робиш проект, далі йдеш на роботу, приходиш лягаєш спати. А на вихідних дороблюєш своїх 15 годин і те що не встиг (Але воно було варте того).

Загалом я маю сказати, що після зарахування в програму, тільки від ментора залежить чи ти завершиш програму успішно чи ні. Тому, розмовляти з ним треба і якщо ти не вкладаєшся у назначений графік, то краще про це казати ментору і домовитися про зміни в плані.

Сама програма розподілена на три етапи. Кінець кожного етапу відбувається в кінці відповідного літнього місяця. Студент з ментором має скласти план і перелік того що необхідно зробити до кінця кожного з етапів. Ментор має перевіряти виконану роботу і визначити чи студент може продовжувати працювати над проектом чи варто його відрахувати.

Goodies

Google пропонує перерахування стипендії (1 місяць 720, 2 — 720, 3 — 960) двома способами: на вказаний рахунок банку, або на картку Payoneer (переваги карти наведені нижче).
Card

Cтатистика за цей рік

Google Summer of Code 2017 statistics part 1
Google Summer of Code 2017 statistics part 2

Statistic

LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Красавец, хорошая инициатива, приемлемая компенсация и нематериальные бенефиты
Помогло в карьере?

Ще невідомо, але точно допомогло з інтерв’ю в гугл.

Подписаться на комментарии