Русский
Русский
English
Статистика
Реклама

Блог компании e-legion

Получаем результат правильно(Часть2). FragmentResultAPI

25.05.2021 20:20:29 | Автор: admin

Мы продолжаем рассказ о новинках библиотеки Jetpack, призванных упростить обмен данными между компонентами Android приложения. Первая часть была посвящена передаче данных из Activity и новому Api Activity Result.

На этот раз посмотрим, какое решение Google предлагает для Fragment. Ввиду популярности паттерна Single Activity работа с фрагментами представляет большой практический интерес для многих Android-разработчиков.

Как передать данные между двумя фрагментами? - частый вопрос на собеседованиях. Ответить на него можно по-разному: создание общей ViewModel, имплементация интерфейса в Activity, использование targetFragment и другие способы.

С появлением Fragment Result Api в этот список добавился простой способ передачи небольшого объема информации из одного фрагмента в другой. Например, возвращение результата какого-либо пользовательского сценария. Мы разберем, как применять новый Api на практике, но сначала немного теории.

Теория

Начиная с версии 1.3.0-alpha04, FragmentManager реализует интерфейс FragmentResultOwner. Это означает, что FragmentManger является диспетчером для результатов, которые отправляют фрагменты. Благодаря этому фрагменты могут обмениваться информацией, не имея прямых ссылок друг на друга.

Таким образом, всё взаимодействие происходит через FragmentManager:

  • Если фрагмент ожидает получить некоторые данные от другого фрагмента, он должен зарегистрировать слушатель во FragmentManger с помощью метода setFragmentResultListener().

  • Если фрагменту необходимо вернуть результат другому фрагменту, он передает FragmentManger объект Bundle, содержащий информацию. Для этого вызывается метод setFragmentResult().

  • Чтобы FragmentManger знал, как соотнести Bundle с нужным слушателем, необходимо указывать строковый ключ при регистрации слушателя и при передаче результата.

Упрощенно данную схему можно представить так:

FragmentB передает данные в FragmentA . FragmentManager выполняет роль диспетчераFragmentB передает данные в FragmentA . FragmentManager выполняет роль диспетчера

Достоинством Fragment Result Api является lifecycle-безопасность - результат передается во фрагмент, только когда тот достиг состояния STARTED, но еще не находится в состоянии DESTROYED.

Под капотом FragmentManger хранит все зарегистрированные слушатели и все отправленные результаты в потокобезопасных реализациях Map:

  • Map<String, Bundle> для результатов, отправленных фрагментами

  • Map<String, LifecycleAwareResultListener> для зарегистрированных слушателей

Когда фрагмент регистрирует FragmentResultListener, FragmentManager добавляет его в Map, а при уничтожении фрагмента, слушатель удаляется из Map. Для того, чтобы учитывать жизненный цикл фрагмента, FragmentResultListener оборачивается в LifecycleAwareResultListener.

При отправке результата, FragmentManager ищет зарегистрированный с тем же ключом слушатель и передает ему результат. Если слушатель не найден, то результат сохраняется в Map в ожидании дальнейшего использования.

А теперь практика.

Практика

В качестве примера возьмем следующий кейс: ProductsFragment содержит список товаров, которые можно сортировать по различным критериям, а SortFragment позволяет указать нужную сортировку. Информация о выбранной сортировке будет передаваться с помощью Fragment Result Api.

Так выглядит итоговая реализация, которую можно найти по ссылке нижеТак выглядит итоговая реализация, которую можно найти по ссылке ниже

В коде все выглядит довольно просто. Чтобы наладить передачу результата, необходимо выполнить всего два шага.

Шаг 1

В ProductsFragment, который ожидает получить результат, мы должны зарегистрировать слушатель с помощью FragmentManager. Для этого воспользуемся экстеншен-функцией setFragmentResultListener из fragment-ktx, которая принимает строковый ключ и слушатель, обрабатывающий результат.

Регистрацию слушателя можно произвести в колбеке onCreate():

override fun onCreate(savedInstanceState: Bundle?) {   super.onCreate(savedInstanceState)   setFragmentResultListener("request_key") { key, bundle ->        val selectedSort = bundle.getParcelable<Sort>("extra_key")        // применение полученной сортировки   }}

Шаг 2

Когда SortFragment будет готов отправить результат, вызывается метод setFragmentResult, в который передается тот же строковый ключ и заполненный объект Bundle.

applyButton.setOnClickListener {   setFragmentResult(      "request_key",       bundleOf("extra_key" to getSelectedSort())   )}

Вот и всё, что требуется для передачи результата с помощью Fragment Result Api.

Важно

Хотя Api довольно прост, стоит разобрать некоторые нюансы его работы, связанные с правильным выбором FragmentManager и жизненным цикломфрагментов.

Выбор FragmentManager

FragmentManager выполняет основную работу в передаче результата от одного фрагмента к другому. Но каждому фрагменту доступен выбор из нескольких вариантов: parentFragmentManager, childFragmentManager и FragmentManager у активити-хоста. Разберемся, в каких случаях стоит выбирать тот или иной FragmentManager.

Сначала представим так называемую master-detail конфигурацию. Активити содержит два фрагмента, FragmentA и FragmentB, между которыми требуется передать результат.

Активити является хостом для FragmentA и FragmentBАктивити является хостом для FragmentA и FragmentB

В таком случае передавать результат между фрагментами может FragmentManager активити-хоста, т.к. доступ к нему имеют оба фрагмента. Получить данный FragmentManager можно путем вызова requireActivity().supportFragmentManager либо parentFragmentManager.

Следующая ситуация характерна, например, для открытия DialogFragment или в случае, если FragmentA размещает внутри себя FragmentC.

FragmentA является хостом для FragmentСFragmentA является хостом для FragmentС

При таком сценарии, передать результат из FragmentС в FragmentA можно двумя способами:

  • Через FragmentManager активити с помощью requireActivity().supportFragmentManager

  • Через дочерний FragmentManager у FragmentA. Чтобы получить на него ссылку, FragmentA должен обращаться к childFragmentManager, а FragmentС к parentFragmentManager.

Особенности Lifeсycle

Как уже сказано, Fragment Result Api обеспечивает lifecycle-безопасность - результат доставляется, только если фрагмент находится на экране. Рассмотрим несколько примеров.

Представим стандартный случай - фрагмент подписывается в колбеке onCreate, затем переходит в состояние STARTED, и как только другой фрагмент передает во FragmentManager результат, фрагмент-подписчик его получает.

Фрагмент получит лишь bundle3, так как он был отправлен последнимФрагмент получит лишь bundle3, так как он был отправлен последним

Если еще до перехода фрагмента в состояние STARTED, во FragmentManager было передано несколько результатов, то фрагмент получит лишь последний из них (так как FragmentManager хранит результаты в Map<String, Bundle>, то каждый последующий перезаписывает предыдущий).

Автоматическая отписка фрагментов происходит при достижении состояния DESTROYEDАвтоматическая отписка фрагментов происходит при достижении состояния DESTROYED

Если после закрытия вновь открыть этот же фрагмент, ему будет доставлен тот результат, который он не успел получить.

Если фрагмент фрагмент-подписчик был закрыт до отправки результата, он получит его при повторном открытии.Если фрагмент фрагмент-подписчик был закрыт до отправки результата, он получит его при повторном открытии.

В том случае, когда фрагмент не закрыт окончательно, а лишь находится в бэкстеке (в таком случае он в состоянии CREATED), то результат будет доставлен, как только пользователь вернется к этому фрагменту.

Сценарий при нахождении фрагмента в бэкстеке в момент передачи результатаСценарий при нахождении фрагмента в бэкстеке в момент передачи результата

Все рассмотренные ситуации объединяет то, что фрагмент подписывался по уникальному строковому ключу. Но что если сразу несколько подписчиков будут использовать один и тот же ключ? Напомним, что FragmentManager сохраняет информацию о подписках в Map<String, LifecycleAwareListener>, следовательно не может содержать несколько записей с одним и тем же ключом. Именно поэтому результат будет доставлен в тот фрагмент, который зарегистрировал слушатель последним.

Результат получает только последний подписчикРезультат получает только последний подписчик

Заключение

Подводя итог, отметим достоинства нового способа передачи результата между фрагментами:

  • Fragment Result Api является стабильным, можно не бояться использовать его в продакшене. Тем, кто использует targetFrament особенно стоит присмотреться, ведь targetFrament стал Deprecated.

  • Api прост в использовании и не требует написания большого количества кода

  • Учитывает жизненный цикл фрагментов - при получении результата, можно сразу работать со view фрагмента

  • Позволяет пережить изменение конфигурации и даже смерть процесса (FragmentManager умеет сохранять данные о переданных результатах в Parcelable)

Но присутствуют и недостатки:

  • необходимо следить за уникальностью строковых ключей, а также выбирать правильное место для их хранения

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

В целом, Fragment Result Api оставляет положительное впечатление, и точно стоит того, чтобы его опробовать, а наглядный пример можно найти по ссылке.

Подробнее..

Стоит ли увольнять разраба за большую и дорогую ошибку? Думаю, нет, но менеджмент хотел крови

20.10.2020 18:21:10 | Автор: admin


В Англии все одержимы футболом. Уйма любительских команд и куча стадионов. И вот через знакомых ко мне обратился один англичанин, у которого была идея и немного денег он попросил сделать приложение, в котором люди могли бы управлять своей любительской командой по футболу. Расставлять людей на поле, делать замены, искать игроков, заказывать стадионы и общаться в чате.

В то время у меня был странный период в жизни и я не знаю, как вообще выжил. Днем университет, ночью работа бэкендером с дежурствами до утра, и где-то в промежутках курсы андроид разработки. Причем у меня хватало энергии и энтузиазма ходить туда не для галочки а по настоящему загореться.

Поэтому я согласился на работу. И это была просто отдушина после того, что я пережил в бэкенд разработке.

В моей школе в кабинете математики висела табличка с надписью, которая сразу меня заинтриговала. Потом я не раз убедился в верности этих слов:

Программа делает не что ты хочешь, а то, что написано


Когда я поступил в универ, на встрече с преподавателями заявил, мол, хочу быть программистом. Меня заверили будешь. Правда добавили, чтобы стать программистом придется учиться всю жизнь. Как-то по-своему это истолковав, я не стал растягивать обучение на всю жизнь и навалился по полной: пары в универе, курсы по вечерам, фриланс по ночам.

Поиск подработки завел меня в интересный проект: разработка движка распознавания речи на плюсах. Вместе с командой мы боролись за процент распознавания: я реально надеялся прокачать машину до 100% результата!

Это была настоящая боль перфекциониста. Я придумывал свои решения, брал чужие опенсорсные движки, разбирал их на винтики, и собирал заново. Кастомизировал код, не спал ночами, клевал на парах. Разматывал километры кода ради нескольких процентов на финише.

Ничего так и не вышло. Только через пару лет я узнал, что это было недостижимо. Мне попалась новость о том, что нейронная сеть фейсбука распознает лица с вероятностью не более 95%. Я посочувствовал фейсбуку: даже такой крупной компании не удалось достичь сотни. А еще в статье была отличная приписка о том, что человек распознает лица с вероятностью 93%. Серьезно?

Так я впервые немного разочаровался в разработке


Попробовал фронтенд, но все, что тогда о немих знал, лежало в области стереотипа они делают сайты. Уже тогда это звучало скучно. Хотелось чего-то по-интереснее. Чтобы найти новую область, я двинул в Сколково.

В Сколковской магистратуре платили хорошую стипендию. Но если ты хочешь жить в Москве на широкую ногу, заколачивай чуточку больше. Я наткнулся на вакансию компании из финсектора. Нужно было писать на питоне бэк и иногда дежурить по ночам.

На собеседовании меня хорошенько погоняли по многопоточности, по плюсам на листочке (писать код от руки было тяжело). Поспрашивали какие-то базовые вещи по питону, и в итоге взяли.

До этой компании я работал только в небольших командах. В кейсе с распознаванием речи мы трудились впятером, здесь же яблоку негде было упасть от разработчиков. И все они знали больше меня. Я сыпал вопросами, и кайфовал, когда моя работа получала фидбэк. Первые три недели я осваивал ремесло. Каждое код-ревью заканчивалось ответом плохо. Я всё переделывал, но лучше не становилось. Мой код должны были заапрувить как минимум 4 человека. Бывало, трое говорили норм, а четвертый все равно находил, к чему придраться.

Там же мне показали интересный способ ревью я отдаю лиду код, он помечает некоторые места, но не говорит, в чем там проблема, я должен попытаться понять сам. И ты реально начинаешь думать это очень прокачивает.

Но даже такой строгий контроль за качеством не спас от беды.

Работа была связана с базами данных. На серверах компании хранились тонны финансовой информации клиентов (банковские карточки, истории операций). Раз в 5 дней выпадала ночь, которую я должен был провести на работе. Я следил, чтобы все работало, отвечал на почту и звонки. Мне нравились ночные дежурства. За выход платили даже не двойную, а тройную ставку. Просидел вахту с девяти вечера до шести утра получил оплату как за 3 дня. А что еще нужно студенту?

Кроме денег студенту нужно высыпаться


В нашей компании все рабочие процессы были выстроены безупречно. Проверки, тесты, ревью. Снова проверки, тесты и ревью. Но даже такая система может дать сбой, и ты должен быть готов, что тебя словно солдата-срочника, поднимут утром по тревоге.

В один прекрасный день я вернулся с дежурства. Просто валился с ног. Пошел в универ поизображал студента. Вечером я вырубился замертво, а не было и восьми часов. Хотелось проспать вечность, не меньше.

Но в 4 утра меня разбудил человек, который отвечал в компании за весь бэк он позвонил мне впервые за все время.

Ты что-нибудь делал вчера с базой?
Нет, ничего особенного.
Вставай и срочно к компу.

Я конечно жаворонок, но все равно офигел от звонка. Мое дежурство было накануне аварии.

Конечно, первая мысль я все нахрен сломал


Оказалось, целую группу пользователей просто выпилили. Ее не было в продбазе. Но она существовала здесь всегда, куда она провалилась? Начал искать. Посмотрел по логам, что запускалось. Начал курить эти логи (первые полчаса ушли на то, чтобы проснуться, еще полчаса разогреть логи и понять, какие скрипты запускались). Выкачал себе скрипты, посмотрел, что они делали, нарыл, какие из них лезли именно в это место. И нашел ошибку.

Запустил на тестовом окружении тестовые пользователи выпилились. Хм, посмотрел, как эта штука проверялась. Почему-то на этот раз, пусть у нас и три девстенда, первый и второй пропустили, а третий даже не свалился. Тест на это никто не писал (поставил себе галочку написать, чтобы больше такого не происходило).

Параллельно со мной так же сидели и искали проблему куча народу, постоянно созваниваясь. Наконец, в 6 утра мы поняли, что кто-то написал скрипт, проверил на тесте, но не учел один важный кейс. В итоге юзеры подпали под тех, что подлежали удалению.

Так мы за ночь грохнули около миллиона пользователей


Мы восстановили базу, сделали бэкап. Пока мы не знали о проблеме, пользователи вводили новые и новые данные, в течение всей ночи. Мы написали всем о технической неполадке, закрыли вход, чтобы не было потока новой информации. Предстояло мёржить базу за 7 часов, накатывать на ту, что в ноль, возвращать всех пользователей. Тем, кто пытался зайти, но не смог, компания отписала отдельные извинения, задарила бонусы.

К 7 утра мы все починили. В 8 часов компания уволила человека, который все это заварил.

Парень работал хорошо, всегда все проверял. Пару раз он даже делал мне ревью, и советовал реально классные вещи. Но это как с вождением. В первый год за рулем ты боишься всего, и плетешься в правом ряду. Потом немного расслабляешься, и в этот самый момент попадаешь в аварию!

Стал бы я увольнять человека за ошибку? Программа делает то, что ты ей написал. Но мы же разрабы, мы постоянно ошибаемся. Представьте, как этому парню было плохо тем утром. Да и зачем выставлять человека, который теперь будет выверять в своем коде каждый символ? Но менеджмент хотел крови, и в следующие пару недель вылетели еще несколько причастных к этому случаю.

Я поработал там еще пару недель, но уже понимал, что хочу уйти из бекенда.

В Сколково обратил внимание, как мне интересен проекте с андроид разработкой. Мы разрабатывали приложение и связывали его с ардуино. Задача была довольно простая: надо было подключиться к ардуино по bluetooth или wifi с телефона и передать команду. В приложении была пара экранов с кнопками. По задумке ардуино была связана с макетом умного дома и эти кнопки должны были открывать и закрывать окна.

Причин влюбиться в андроид с первого взгляда было хоть отбавляй


Мне очень понравилось, что есть UI. Понравилась возможность делать анимации (сейчас в андроид разработке я люблю это больше всего). Документации от Google была гораздо лучше той, что мне до этого довелось видеть. Java зашел больше питона и C++. Пока проходил курсы по андроиду на курсере, понял одну вещь:

мне важно сразу видеть результат.

Также стало проще объяснить, чем я занимаюсь. Попробуйте рассказать человеку, что такое работа в бекенде. Зачем это нужно и так далее. С андроидом просто достаешь телефон и говоришь вот это приложение я сделал.

Тот кейс с футболом Мне дали написанный индусами проект. Честно говоря, справились они не очень. Вместо того, чтобы выделять в функцию код они копировали 700 строк снова. Рефакторинг занял две недели.

И все равно я закончил его и просто дико кайфанул. Я понял, что хочу этим заниматься и дальше, принялся искать уже компанию для работы. Прошел андроид школу e-legion, сделал тестовое, устроился а теперь возглавляю здесь Android разработку.

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

Я месяц провел в MIT и понял даже софтверным инженерам не стоит забывать про паяльник

24.11.2020 18:14:36 | Автор: admin


В детстве отец иногда доверял мне свой паяльник. Я занимался нехитрой пайкой, но чаще поглядывал, как руки отца то окунали паяльник в канифоль, то цепляли кусочек припоя. Запах канифоли с тех пор всегда будит во мне воспоминания. Кто бы мог подумать, что я буду так же увлеченно паять, но уже не батиным, а навороченным американским паяльником, и не на кухне в квартире детства, а в Массачусетском Технологическом институте.

Что ты ожидаешь от одного из самых крутых университетов мира? Выматывающие лекции и бесконечные формулы на белесых от мела досках? Конечно. Умудренная семи пядей во лбу профессура со всего мира? Обязательно. Но престижный Massachusetts Institute of Technology знаменит не только этим. MIT ценят за близость к индустрии. Буквально в нескольких кварталах от университетских корпусов в Бостоне расположены офисы техногигантов, таких как Google и Microsoft. Студентов учат не только инженерному делу, но и практическому его применению, а также умению хорошо продать свою идею, или найти человека, который продвинет твою инновацию на рынок.

Знаменитый Гарвард находится в двух станциях метро от MIT. Умники гарвардские выпускники, разбирающиеся в бизнесе, просто приходят к тру инженерам и создают новые компании. Это место генерирует новые стартапы каждый день. И я совсем не удивился, когда услышал очередное задание от преподавателя воркшопа. Каждому из нас надо было во что бы то ни стало получить скидку в местных магазинах. Один парень так старался на кассе в сетевом Best buy, что продавщица черкнула ему свой номерок и имя в чеке.

Что ж, это тоже успех.

Санкт-Петербург, весна 2013 года за моими плечами ИТМО и несколько разрабовских работ.


К тому времени совсем молодой российский Сколтех (Сколковский институт науки и технологий) набирает студентов в магистратуру. Обучение на английском, все в лучших традициях MIT, и более того, Сколтех и создан при поддержке Массачусетского технологического института. На должность ректора Сколтеха приглашен профессор MIT Эдвард Кроули. Программу магистратуры предваряет поездка в США месячный Innovation Workshop. Не раздумывая я подаю документы и принимаюсь готовиться к вступительным испытаниям.

Процесс поступления я запомнил следующим образом: собираешь и отправляешь документы, тебя приглашают в Москву, где проводят трехдневный хакатон и собеседования. Там же сдаешь TOEFL. Все получилось так быстро, что американской визой я занимался уже в Питере. Отпечатки пальцев, несколько вопросов за жизнь, подтверждающие документы от Сколтеха и выписка со счета с кругленькой суммой. Зачисление в магистратуру и одобрение визы я не знаю, чему я больше радовался!

Мне пришлось подготовить внушительный пакет документов. Диплом с высоким средним баллом, два рекомендательных письма, резюме, список публикаций, эссе на тему своих целей и стремлений и personal statement. Как перевести последнее, я толком не знаю. Что-то вроде описания жизненного пути как я дошел до жизни такой, что изучал и чему научился. Пришлось перетряхнуть в памяти всю свою жизнь, начиная со школы, и задуматься над многими вещами, о которых, так уж получилось, я ранее не думал серьезно.

Перелет в Бостон


занял порядка 10-12 часов. Нас встретили, посадили в типично американские огромные черные джипы и отвезли в общежитие, где нас ждала пицца. Боже, о чем еще может мечтать человек после долгого перелета?

Для изучения города нам устроили scavenger hunt по Бостону. С помощью подсказок мы искали специальные монеты, которые были раскиданы по улицам. Я думаю, это выглядело забавно: группки русских и не только студентов носятся по бостонским закоулкам, ищут монеты и донимают местных бесконечными вопросами. Но нам было весело! В выходные занятий не было, за несколько уикендов мы успели изучить окрестности, покататься на яхтах, выехать на океан и даже смотаться в Нью-Йорк.

Рядом с MIT и Гарвардом есть магазины, где можно купить футболки, кружки и другие вещи с символикой университетов. И все это не для туристов. Студенты искренне гордятся тем, где они учатся. На футболках то и дело мелькают надписи Nerd pride. Бостонцы знают и уважают людей из MIT. В один из вечеров я пробрался на концерт в Бостоне.

На пути обратно я встретил много людей, которые махали мне и кричали: MIT rules и engineers forever.


После такого тебя просто переполняет мотивация учиться дальше!



В будни каждый день был расписан по часам. Мы начинали в 9 утра и заканчивали ближе к семи вечера. Нередко, чтобы успеть всё, преподаватели продолжали занятия за обедом, на лужайке или в кафе. Однажды мы немного устали и закапризничали. Кто-то бурчал мол либо ужин, либо учеба. Тогда кто-то предложил: Давайте совмещать, но только если будет пюрешка.. Лекции во время еды не нравились, но с пюрешкой так уж и быть были согласны. Все горячо поддержали эту идею. И вы знаете, преподаватель на следующий день выкатил нам тазик с пюрешкой! Ох, уж эти странные русские, черт с вами, ешьте свою mashed potato, рассмеялся он, и продолжил занятие. Мы были в восторге.

И в этом весь дух отношений между студентами и преподавателями. Это история про уважение и страсть. Все вокруг пашут, фигачат, и ты тоже начинаешь ускоряться. Когда приходишь к человеку, который помогает тебе составить твой индивидуальный план обучения в MIT и говоришь: Я хочу вот эти курсы и еще вот эти. Он смотрит на тебя с облегчением и выдает: Наконец-то человек, который знает, чего хочет.

В погружении в процесс помогают и стены. Все аудитории доступны, нет никаких охранников. По всей территории MIT прекрасный бесплатный вай-фай. (Честно, я сначала подумал, что во всей Америке так. Каково было мое огорчение, когда я вышел в Бостон!).

Вот неполный список того, что мы изучали за 3 недели:


математика в инновациях, как добиться быстрого успеха, лидерство, интеллектуальная собственность, инновации и дизайн в инженерии, как правильно писать тексты, инновации и производство, разработка и дизайн продукта, этика и вывод продукта на рынок. Лидерство преподавал серьезный мужик со званием из армии США. Услышав его голос, я сразу узнал его: это был тот самый голос из военных американских фильмов.



Помимо занятий с утра до вечера, в свободное время за 3 недели надо было сделать свой собственный проект или продукт. Кто-то разработал автоматизированный полив, наша команда выкатила систему видеонаблюдения для распознавания того, что человек засыпает. Были еще отдельные тимбилдинговые игры по решению какой-то интересной задачи. Например, надо было используя веревки снять крышку с нефтяной скважины. Починить ее и поместить на место. При условии, что приближаться к скважине можно не ближе чем, на 4 метра.

Нас учили как создавать свои собственные стартапы и компании. Да, они были комнатными, но еще не раз мне пригодится этот опыт в карьере, другим ребятам в науке.

Там я снова взял в руки паяльник и увидел вживую всякие роборуки


На одном из занятий Innovation Workshop преподаватель вручил мне паяльник и сказал что-то в духе: Паяй, сынок. Один преподаватель с помощью света передавал звук. Есть проблема с передачей информации со спутников на землю. Провод не бросить, увы. А что если можно пустить луч, огромная штука его примет и все будет работать! Примерно так он объяснил следующие действия: Смотрите, что могу! Он дает что-то типа приемника одному из нас, а сам берет небольшую указку, которая светит еле видимым светом. Наводит на приемник луч и мы слышим музыку Убирает музыка замолкает. Как ты это делаешь, маг?

И так каждый день. То, что я видел вызывало искренний интерес, какое-то детское восхищение и желание во всем этом участвовать. Как будто на меня навели луч и появилась музыка, которой раньше я не замечал. Ну, если не музыка, то второе дыхание.



После той поездки кто-то из ребят углубился в науку и учится на PhD в Англии, кто-то ушел в data science, а кто-то открыл свою компанию и запускает спутники в космос. Я свое вдохновение конвертировал в страсть: я детально изучал все что давали в Сколтехе, а что не давали отбирал и изучал. Лаборатория робототехники в Сколтехе сделана по образу и подобию соответствующей лаборатории в MIT. Я еще много провел в ней времени, получив доступ к квадракоптерам, 3d-принтерам, лазерным резакам и другому крутому оборудованию, которое я раньше не видел.

Все знания, которые я получил имели практическую направленность. И это очень круто. Ты не просто считаешь дифференциальные уравнения, ты потом с их помощью отображаешь снимки МРТ.

Это как паять сложную схему: ты максимально вовлечен и головой и руками.
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru