...

суббота, 20 марта 2021 г.

Acer пострадала от атаки криптовымогателя, хакеры требуют от компании выкуп $50 млн

По информации Bleeping Computer, тайваньский производитель компьютеров компания Acer подверглась атаке криптовымогателя. Хакеры требуют выкуп $50 млн до 28 марта, в противном случае они угрожают опубликовать часть утекших данных. Предполагается, что за взломом Acer стоит группа REvil. Злоумышленники могли получить доступ к закрытой сети Acer через уязвимость Microsoft Exchange (ProxyLogon).
Издание Bleeping Computer пояснило, что сумма выкупа, затребованная хакерами, является на сегодняшний день самой большой из известных инцидентов, пока что рекорд $30 млн.

Acer выпускает электронику, компьютеры, ноутбуки и мониторы. В компании работает около 7 тыс. сотрудников, ее прибыль в 2019 году составила $7,8 млрд.

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

В ответ на запросы Bleeping Computer представитель Acer не предоставил четкого ответа относительно того, подверглись ли они атаке вымогателя REvil. Компания заявила, что не может предоставить дополнительную информацию, поскольку правоохранительные органы начали расследование по недавнему инциденту, а по соображениям безопасности Acer не может комментировать детали произошедшего.

Факт совершения атаки подтвердил Валерий Марчив из LegMagIT. Причем, по его словам, инцидент произошел до 14 марта. Именно с этой даты REvil начала требовать выкуп, сделав Acer предложение о 20 % скидке, если бы компания оплатила его до 17 марта. Теперь до 28 марта цена возросла до $50 млн, потом будет $100 млн, как написали REvil. Представитель Acer соглашался только на $10 млн и был шокирован требованием заплатить в пять раз больше. Взамен злоумышленники обещают предоставить дешифратор, отчет об уязвимости и удалить у себя все скопированные файлы Acer.

Требование выкупа от Acer, а также сроки, которые дали хакеры REvil компании.

Причем в процессе общения хакеры REvil попросили Acer благоразумно оценить ситуацию и предупредили, что компания может повторить судьбу SolarWinds.

ИБ-специалист Виталий Кремез сообщил BleepingComputer, что платформа киберинтеллекта Advanced Intel Andariel недавно обнаружила, что группа Revil атаковала сервер Microsoft Exchange в домене Acer. Причем это происходило как раз в начале марта. В это время Microsoft сообщила о критических уязвимостях в серверах Exchange. Тогда же Microsoft начала настоятельно рекомендовать компаниям проверить вручную и установить последние обновления безопасности для серверов Microsoft Exchange для закрытия 0-day уязвимостей.

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

Let's block ads! (Why?)

Франсвильская биота: первые многоклеточные организмы

Жизнь на Земле зародилась около 3700 миллионов лет назад, но долгое время оставалась одноклеточной. На слуху эдиакарский период, начавшийся 635 миллионов лет назад, когда появились удивительные многоклеточные животные, многие из которых не имеют близких родственников среди ныне живущих видов. Но сегодня я хочу рассказать вам о гораздо более раннем всплеске многоклеточной жизни, случившемся 2100 миллионов лет назад.

image

Под катом много больших картинок.
В атмосфере Земли долгое время не было кислорода. Около 2500 миллионов лет усилилась активность вулканов. Вулканы выбрасывали много углекислого газа, из-за чего дожди становились всё обильнее. Потоки дождевой воды ускорили эрозию почв и вымывание из неё питательных веществ: они стекали по рекам в океаны и создали благоприятные условия для фотосинтезирующих организмов. Уровень кислорода в атмосфере начал постепенно расти. Учёные и раньше подозревали, что такое изменение условий могло привести к всплеску новых видов живых существ, но доказательств было совсем немного. Пока несколько лет назад в Африке не были найдены окаменелости возрастом 2300-2100 миллионов лет, получившие название Франсвильской биоты.

Мы не знаем, были ли они сложными колониями одноклеточных существ, как современные слизевики, или больше походили на многоклеточные организмы. Размер этих существ доходил до 17 сантиметров. Жили они в неглубокой части океана, где воды были богаты кислородом. Вот что уже удалось найти:

image

Иллюстрация 2. Слева показаны фотографии окаменелостей, справа, в оранжевых тонах, — результаты компьютерной микро-томографии, позволяющей рассмотреть внутреннее устройство останков. A и C — существа, похожие на яичницу или равиоли, с мясистым центром. У существ A можно видеть складчатые тонкие края, а у существ C они более ровные. Существа E-H имеют удлиненную форму тела и множество синусоидальных складок.

image

Иллюстрация 3. Все показанные существа с утолщенным центром и складчатыми дискообразными краями.

image

Иллюстрация 4. Существа, сочетающие дискообразную форму и длинные отростки. На длинных отростках есть утолщения, похожие на бусины.

image

Иллюстрация 5. Большое существо того же типа, рентгеновскую микро-томографию не удалось сделать из-за размеров и хрупкости окаменелости.

image

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

image

Иллюстрация 7. Два организма с утолщенным центром и складчатыми краями рядом.

Также были найдены существа, рывшие ходы в донных отложениях, то есть они могли активно и целенаправленно передвигаться:

image

Иллюстрация 8. Рентгеновская томография ходов, прорытых в донных отложениях.

image

Иллюстрация 9. Сверху — ходы в донных отложениях и окаменелости существа, навсегда оставшегося в норе. Снизу — ещё несколько рентгеновских томограмм существ, похожих на яичницу.

Кислород, появившийся в атмосфере и давший процветать новым многоклеточным формам жизни, стал связываться с активными химическими веществами, поглощавшими его. Без кислорода все эти существа вымерли. С того момента до нового всплеска многоклеточной жизни прошло полтора миллиарда лет.

Источников о франсвильской биоте пока не много, вот что ещё почитать:

  1. Франсвильская биота.
  2. Эдиакарская биота.
  3. New Insights into the Great Oxidation and Lomagundi Events
  4. Large colonial organisms with coordinated growth in oxygenated environments 2.1 Gyr ago
  5. The 2.1 Ga Old Francevillian Biota: Biogenicity, Taphonomy and Biodiversity
  6. Life Was Already Moving 2.1 Billion Years Ago

Let's block ads! (Why?)

Пример, как в PVS-Studio появляются новые диагностики

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

Всё началось с проверки проекта COVID-19 CovidSim Model и статьи про неинициализированную переменную. Проект оказался маленьким и написанным с использованием современного стандарта языка C++. Это значит, что он отлично может пополнить базу тестовых проектов для регрессионного тестирования ядра анализатора PVS-Studio.

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

Программист, которому поручили добавить проект в тестовую базу, подошёл к задаче основательно и решил заглянуть в раздел MISRA-диагностик. Вообще, это делать было необязательно, так как это весьма специфичная группа диагностик, которую нет смысла включать для таких проектов, как CovidSim.

MISRA С и MISRA C++ диагностики предназначены для разработчиков встраиваемых систем, и их суть сводится к ограничению использования небезопасных конструкций программирования. Например, не рекомендуется применять оператор goto (V2502), так как он провоцирует создание сложного кода, в котором легко допустить логическую ошибку. Подробнее с философией стандарта кодирования MISRA можно познакомиться в статье "Что такое MISRA и как её готовить".

Для прикладного программного обеспечения, которым как раз и является проект CovidSim, включать набор MISRA диагностик не имеет смысла. Пользователь просто утонет в огромном количестве малополезных для него сообщений. Например, экспериментируя с этим набором диагностик, мы получали более миллиона предупреждений для некоторых открытых проектов среднего размера. Грубо говоря, с точки зрения MISRA, в каждой третьей строчке кода может быть что-то не так :). Естественно, никто всё это смотреть и тем более править не будет. Проект или сразу разрабатывается с учётом MISRA рекомендаций, или для него этот стандарт кодирования неактуален.

Но мы отвлеклись от темы. Так вот, бегло просматривая MISRA предупреждения, коллега зацепился взглядом за предупреждение V2507, выданное для этого фрагмента кода.

if (radiusSquared > StateT[tn].maxRad2) StateT[tn].maxRad2 = radiusSquared;
{
  SusceptibleToLatent(a->pcell);
  if (a->listpos < Cells[a->pcell].S)
  {
    UpdateCell(Cells[a->pcell].susceptible, a->listpos, Cells[a->pcell].S);
    a->listpos = Cells[a->pcell].S;
    Cells[a->pcell].latent[0] = ai;
  }
}
StateT[tn].cumI_keyworker[a->keyworker]++;

Правило V2507 заставляет оборачивать тела условных операторов в фигурные скобки.

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

Давайте присмотримся. Код только кажется корректным, но таковым не является! Фигурные скобки не относятся к оператору if.

Отформатируем код для наглядности:

if (radiusSquared > StateT[tn].maxRad2)
  StateT[tn].maxRad2 = radiusSquared;

{
  SusceptibleToLatent(a->pcell);
  ....
}

Согласитесь, это красивый баг. Он наверняка войдёт в Top10 C++ ошибок, найденных нами в 2021 году.

И что из этого следует? Подход, диктуемый стандартом MISRA, работает! Да, он заставляет писать везде фигурные скобки. Да, это утомительно. Но это оправданная плата за повышение надёжности встроенных приложений, используемых в медицинской технике, автомобилях и других системах высокой ответственности.

Хорошо, у разработчиков, использующих стандарт MISRA, всё нормально. Однако рекомендовать всем подряд использовать фигурные скобки – это плохая идея. Используя такой подход, очень легко довести анализатор до состояния, когда им станет невозможно пользоваться. Будет так много сообщений, что их просто никто не будет смотреть.

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

Выдать предупреждение, если для оператора if выполняются следующие условия:


  • весь условный оператор if записан в одну строчку и имеет только then-ветку;
  • следующий statement после if – это compound statement, и он находится не на той же строке, что и if.

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

Именно так эта идея сейчас оформлена в нашей системе учёта задач. Возможно, в процессе реализации что-то будет сделано по-другому, но это уже неважно. Главное, появится хорошее диагностическое правило, которое начнёт выявлять новый паттерн ошибки. Далее мы распространим его на C# и Java ядра анализатора PVS-Studio.

Только что мы рассмотрели интересный пример, как было сформулировано новое диагностическое правило, которое затем будет реализовано в PVS-Studio. Скажем спасибо проекту CovidSim, стандарту кодирования MISRA и наблюдательности нашего коллеги.

Спасибо за внимание и следуйте за мной в мир С++ и багов :). Twitter. Facebook.

Дополнительный ссылки:


  1. Технологии, используемые в анализаторе кода PVS-Studio для поиска ошибок и потенциальных уязвимостей.
  2. Под капотом PVS-Studio для Java: разработка диагностик.
  3. Использование машинного обучения в статическом анализе исходного кода программ.

Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Andrey Karpov. Example of How New Diagnostics Appear in PVS-Studio.

Let's block ads! (Why?)

Покупка загородной недвижимости, выбор места

Более 10 лет назад, мне как и многим захотелось вырваться из «душного» города, и начать жить на природе, в своем загородном доме. Как и большинство таких людей, я понятия не имел, с какими трудностями мне придется столкнуться. В данном цикле статей я хочу поделиться своим опытом проживания в загородном доме и помочь людям подготовиться к тем трудностям, которые могут возникнуть. А самое главное, помочь более трезво и расчетливо подойти к выбору объекта для покупки.

Цикл статей будет разбит на четыре части.

1) Выбор места.

2) Выбор технологии по которой должен быть построен дом.

3) Коммуникации в доме.

4) Оформление покупки.

Выбор места.

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

1) Для постоянного проживания.

2) Вы собираетесь приезжать только в выходные.

3) Вы собираетесь проживать только в весенне-летний сезон.

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

Участок для дома постоянного проживания

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

Парковка для машины возле дома тоже важный вопрос. Если возле дома нет площадки с твердым покрытием, а в земле содержится много глины, может так случится, что после таяния снега как-то утром вы не сможете без танцев с досками и кирпичами отъехать от дома. У меня такое пару раз было, пока я не засыпал площадку для машины щебенкой. Это все кажется мелочами, но КамАЗ щебёнки стоит денег, плюс кто-то должен ее раскидать по площадке. И если у мужчин с крепким здоровьем проблем быть не должно, то дамам и мужчинам с ограниченными физическими возможностями придется кого то нанимать.

Очень внимательно отнеситесь к тому, где вы будете покупать продукты питания. В вашем населенном пункте может быть магазин. Обычно владелец магазина устраивает в нем еще и пивной «ресторан». Также возможно, что на зимнее время этот магазин закрывается. Обычно в таких магазинах очень скудный ассортимент продуктов, и если вы привыкли к определенной еде, найдите ближайший магазин, в котором вы гарантированно сможете покупать то, что вам необходимо. Посчитайте, сколько времени это будет у вас занимать и на сколько часто вам нужно будет закупаться продуктами. И если у вас одна машина, которая теоретически может сломаться, продумайте запасные варианты покупки продуктов.

Следующий пункт – это вывоз мусора коммунальными службами. Регулярность вывоза мусора в разным населенных пунктах может отличаться очень сильно. И если в вашем населенном пункте нет человека ответственного, за обслуживание площадки с мусорными контейнерами, то на этой площадке могут твориться ужасные вещи. Также надо помнить, что количество мусора зимой и летом может отличаться в разы. Поэтому стоит прикинуть расстояние до ближайшей площадки с контейнерами (лучше, чтобы она была от вас хотя бы на расстоянии 100-200 метров), количество контейнеров во всей деревне , сравнить с количеством домов. В моем случае контейнерная площадка была в 100 метрах от дома, но люди из соседней деревни, из-за того, что у них контейнеры уже заполнились, уезжая домой заваливали мусором наши контейнеры. И в летнюю жару, эта неприглядная куча начинала неприятно пахнуть.

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

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

Обычно поблизости от любого населенного пункта есть озеро, но не все озера одинаковые. В связи с озером вы должны прояснить несколько вопросов. Какое дно, глина, песок, ил? Тут все просто, глина - скользко, ил - противно, песок — идеально. Если есть оборудованные места для купания, то вопрос дна может нивелироваться. Обязательно наберите в литровую бутылку воду из озера и сдайте на анализ, тем более если переезжаете в загородный дом с детьми. Также можно поговорить с соседями и поискать на близлежащих столбах предупреждения о запрете купания. Тому, кто любит рыбалку, лучше приехать в выходные в вечернее время и поговорить с рыбаками.

Паводок – страшное слово, которое мы слышим каждую весну по телевизору, но мало кто задумывается, что эта напасть может настигнуть и ваш дом. Изучите участок вокруг вашего дома, есть ли поблизости болотца или ямки, где заметно, что стояла вода. Если ваш дом крайний к полю, измерьте, куда идет уклон. Следы от ручьев с полей вы можете не найти, так как колхозная техника может их заровнять. Желательно также измерить влажность в погребе или подвале дома в любой самой нижней точке и посмотреть на стенах, есть ли следы от стоячей воды. Помимо дискомфорта, любая влага в доме очень быстро его разрушит.

Насекомые, они могут свести на нет весь отдых. По опыту могу сказать, что из года в год на насекомых действуют по-разному разные средства. То, что сработало в прошлом году, может не сработать в этом, особенно это касается мошек. Мошки обычно появляются в конце весны и в начале лета, убить их как комара не получится, так как они очень маленькие. Помогает только работающее средство в течении 30 минут ( потом надо повторить обработку) и одежда с сеткой. В продаже есть одежда из сетки с капюшоном, для прогулок в жаркую погоду в комплексе со средством – это хороший вариант. Также смотрите, чтобы окна дома и терраса могли закрываться москитными сетками. С комарами в этом плане проще, есть фумигаторы для дома и хорошие средства для нанесения на кожу. С мошками спасает лишь то, что они в дом не особо рвутся, и если кто-то из них попадает в дом, быстро становится не активным. Если рядом с домом есть большие участки травы, которая никем не косится, будьте готовы к полчищам мошек весной и первой половине лета.

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

Участок для дома выходного дня

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

Участок для дома на лето

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

Let's block ads! (Why?)

Нейробиология и карьера в науке


На этой неделе в наших соцсетях выступала Виктория Коржова, PhD in нейробиологии в Ludwig Maximilian University of Munich.

Сейчас Вика работает Product Manager в бутик-консалтинговой компании Product People и консультирую студентов и молодых ученых по вопросам научной карьеры и ведет телеграм-канал об этом.

Вика рассказада о своей работе над изучением синдрома Альцгеймера и научной карьере в целом.


Всем привет, меня зовут Виктория Коржова. По образованию я биолог и нейробиолог, защитила диссертацию по нейронаукам в Мюнхене, в университете Ludwig Maximilian. Сейчас работаю как продукт-менеджер в компании Product People. Напрямую моя деятельность сейчас с наукой или исследованиями не связана; мы работаем с очень разными продуктами как продукт-менеджеры, которые иногда более-менее к науке или научным вопросам близки.

Сначала я расскажу, как эта история развивалась; может быть, про то, почему я в науке больше не работаю, и почему я, несмотря на это, защитила диссертацию. И, может быть, немного прокомментирую злобный комментарий, который мне уже оставили на Хабре, потому что такие комментарии регулярно приходят и, наверно, могут кого-то напугать, кто чувствует себя в какой-то похожей на мою ситуации.

Я после школы не то чтобы хорошо представляла, чем в жизни можно заниматься. В школе про это как-то мало говорилось; я надеюсь, что сейчас у современных школьников ситуация получше, что больше разговаривают о том, чем можно заниматься в жизни, какие бывают профессии, как университетское образование связано с профессиями. Но, когда я заканчивала школу, было больше ощущение, что университетское образование – это продолжение обучения, и можно выбрать те предметы, которыми вы хотите больше заниматься, больше изучать. И я выбрала биологию, потому что биология была интересна. У меня вроде бы неплохо получалось, я участвовала в олимпиадах; по сравнению с другими предметами казалось, что это более интересный предмет. Поэтому я пошла на биофак, поступила в СПбГУ, и учиться было очень интересно. Было интересно узнавать, как все устроено, как устроен мир, разные вещи в природе. Нам много рассказывали на лекциях про замечательных ученых, которые делали открытия, и я думала – да, я буду ученым, буду заниматься исследованиями и делать открытия.

Уже со второго курса я начала ходить в лабораторию. Читала научные статьи, несмотря на то, что это было очень сложно и непонятно, потому что мне не хватало бэкграунда, но я старалась. Старалась учиться делать что-то руками, какие-то эксперименты делала. И в результате сделала бакалаврскую работу по изучению белков амилоид-бета и PRP в модельной системе дрожжей. PRP – это белок, который связан с прионными заболеваниями, а амилоид-бета связан с болезнью Альцгеймера. В процессе изучения я стала читать много статей про мозг, про нервную систему, про эксперименты на животных или препаратах нервных клеток. Так я заинтересовалась нейробиологией. К концу бакалавриата я захотела заниматься именно ею, а не молекулярной биологией, которой хотела заниматься изначально (почему и пошла в лабораторию, которая занималась генетикой, и делала работу с дрожжами).

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

Потом, довольно неожиданно для меня, я перешла в другую лабораторию. Открылась новая лаборатория в Политехническом университете, и они занимались очень интересными вещами, и у них было такое оборудование, с которым я только мечтала тогда работать – например, двухфотонный микроскоп. И я перешла на второй курс магистратуры в ту лабораторию. Мне повезло, что лаборатория тогда еще устраивала поездки своих новых студентов, аспирантов и научных сотрудников в лабораторию в США, которой руководил тот же руководитель, который открывал лабораторию в Питере. Я тогда поехала на стажировку в США, и получила больше опыта о том, как идет работа в разных странах. Я сделала там свой магистрский проект, в котором я занималась оптогенетикой на культуре нейронов и изучала болезнь Хантингтона.

У меня также за время магистратуры было два других опыта международной работы. На первом курсе я ездила на стажировку в Швейцарию, в Лозанну, где я изучала молекулярную нейробиологию. И после окончания второго курса магистратуры я была на стажировке в Израиле, в институте Вейцмана, где я тоже изучала молекулярную нейробиологию и морфологию.
А после этого я поступила в аспирантуру в Германии. К концу магистратуры я была уже серьезно убеждена в том, что хочу заниматься именно нейробиологией, изучать что-то в нервной системе. Мне казалось, что академические исследования – это тот путь карьеры, который я хочу продолжать. Я был серьезно настроена на аспирантуру; хороших вариантов аспирантуры в России я для себя не видела по группе причин. Было мало лабораторий, которые занимались теми темами в нейробиологии, которые мне были интересны; с другой стороны, в тот момент в принципе было мало хорошо оснащенных лабораторий. Кроме того, шансов, что за интересную тему мне будут платить такую зарплату, на которую я смогу жить в Питере – а я сама была приезжей – тоже было мало. При этом, хотя мой опыт тогда был не очень большой – в сумме я чуть больше полугода провела в разных стажировках за границей – мне многое понравилось в том, как работают зарубежные лаборатории, во взаимодействиях между учеными, сотрудниками, студентами и аспирантами. Хотелось побыть подольше за границей, поработать, поэтому я целенаправленно искала зарубежную аспирантуру.

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

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

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

Одновременно я наблюдала два других момента. Я видела, что есть мои коллеги, которым очень нравится экспериментальная работа: провести всю неделю с пипеткой в руках – это прикольно для них. Они входят в какое-то медитативное состояние, и им хорошо. Другое, что я наблюдала – что были у меня дополнительные занятия. Я занималась организацией разных мероприятий, организацией команд, построением разных стратегических планов, я помогала людям работать вместе эффективно – и там были задачи, которые мне гораздо больше нравились. Больше было работы, связанной с людьми, которой в академии очень мало. В академии ты обычно работаешь сам с собой, и мне не хватало общения и взаимодействий.

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

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

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

У меня был ограниченный контракт на два года в этой администрации. Я решила, что хочу дальше работать не в академии, а в коммерческой компании. В коммерческой компании гораздо более динамическая обстановка и более прикладные задачи, которые находят применение в ближайшем времени, а не в далеком будущем. Я поняла, что это важный для меня параметр: чтобы результаты моего труда помогали людям уже в ближайшее время, а не когда-нибудь. Поэтому следующая моя работа была в коммерческой компании; опять же, было очень близко к академии, к науке, потому что эта компания делает и продает научное оборудование, оборудование для нейробиологических экспериментов – таких, как те, которые я делала сама в аспирантуре. Мне хотелось продолжать взаимодействовать с учеными и при этом быть в коммерческой среде – и это была идеальная ситуация, где я могла использовать свои прошлые знания, свои какие-то контакты. Мое понимание работы ученого было полезно в общении с клиентами, в поиске новых потенциальных клиентов, в том, чтобы помогать им понять, насколько наше оборудование им подойдет. В этой позиции я проработала почти год. Я занималась непосредственно продажами, digital-маркетингом, общалась с учеными, собирала фидбек от действующих клиентов, чтобы понимать, как дальше развивать продукты.

К сожалению, эту работу я потеряла во время эпидемии. Компания была маленькая, и для них это был очень тяжелый период, а я была единственным иностранным сотрудником, который работал удаленно. Мой контракт разорвали, и я стала думать – окей, что будет следующее. Из моего опыта работы и дополнительной волонтерской деятельности я знала, что мне нравится, чтобы среда была динамическая, чтобы нужно было разбираться в новых темах, собирать информацию, анализировать ее, обобщать, делать выводы. Мне нравится стратегическая работа, мне нравится обдумывать, как сделать что-то лучше, мне нравится определять, как вещи устроены, как сделать их лучше. И мне нравится, чтобы результаты моего труда находили применение в реальной жизни.
Поэтому, после некоторых размышлений, я решила, что мне подошла бы позиция продукт-менеджера. Продукт-менеджер обычно работает в коммерческих компаниях на стыке разных функций; с одной стороны есть бизнес-задачи и достижение коммерческих результатов, а с другой – желания клиентов, понимание того, что нужно клиентам, понимание рынка и индустрии. И немного связи с дизайном, понимания user interface – это тоже важно. Поэтому я стала искать позицию продукт-менеджера, и довольно быстро нашла стажировку в компании, где я сейчас работаю. Стажировка была хорошим способом протестировать, насколько мне действительно подходит эта работа, или это – не то, что я думаю; оказалось, что подходит. Я очень рада, что выбрала именно эту компанию: это консалтинговая компания, и у нас нет какого-то своего продукта. Мы работаем с разными продуктами наших клиентов, у нас очень много динамичности, очень много переключения контекста, необходимости разбираться в новой индустрии, понимать, что там важное, что – второстепенное; понимать разных клиентов, понимать, как что работает. Это очень интересная динамичная среда, и сейчас я продолжаю работать в этой компании.
Я работала с разными клиентами. У нас были из клиентов логистическая компания, кибербезопасность, медицинские технологии – два разных клиента, было приложение для людей, которые увлекаются яхтингом. Был клиент из недвижимости, был производитель электрических скутеров. Очень разнообразные индустрии, разные темы, которые нужно осваивать.

Q: в какие компании можно пойти биологу, которому интересна нейробиология, но в академию не особо хочется идти?

В разные компании. Я думаю, лучше думать не с точки зрения «в какие компании пойти», а с точки зрения «какую работу хочется иметь и какую функцию выполнять». И там уже смотреть, в каких компаниях какие функции есть.

На самом деле, что значит – «интересна нейробиология»? Какая область? Это же очень большая тематика. Хочется заниматься нейробиологией, изучать ее, рассказывать про нее другим – что именно из нейробиологии хочется, чтобы было в работе? Также полезно помнить, что не все наши интересы и увлечения должны становиться нашей работой. Мне по-прежнему интересна наука и научные открытия, но это скорее сейчас мое хобби и причина, по которой я долгое время занималась научпопом. Но я не считаю, что это обязательно должно быть моей работой.
Можно подумать: кроме того, что есть интересующая вас тематика, какие еще есть задачи, функции рабочие, которые вам хотелось бы регулярно выполнять? Что у вас хорошо получается, что вам нравится делать, где вы продуктивны, где вы чувствуете энтузиазм от задач? И потом подумать, как эти задачи совмещаются с интересующей областью или областями, чтобы увидеть, какие получаются профессии или позиции на стыке. И потом уже думать, какие есть компании.

Q: ​если есть вариант податься на стажировку в биотех/фармакомпании или пойти в лабораторию, то что было бы полезнее на начальных курсах биотехнологического бакалавриата?

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

Q: есть программистское образование и опыт. А вот хочется приложить свои навыки в пока абстрактную нейронауку. Насколько я могу быть востребован у нейробиологов?

Давайте сначала разберемся с нейронауками. Нейронауки – это несколько более широкая область, чем нейробиология. Когда мы говорим про нейробиологию, мы имеем в виду, прежде всего, изучение животных; на втором месте – изучение человека. Если мы говорим про человека – это изучение работы нервной системы на клеточном или молекулярном уровне. Если мы говорим про животных – это как исследование поведения, так и клеточный и молекулярный и системный уровень исследований; в основном – экспериментальная работа в лаборатории, то, что называется «wet lab». То есть, эксперименты с пробирками, жидкостями, микроскопами.

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

Где можно применять программистское образование и опыт? С одной стороны, можно применять в когнитивных нейронауках. Для того, чтобы анализировать данные с этого всего оборудования (ЭЭГ, ФМРТ и так далее) и соотносить их с поведением, нужно много программировать. Это анализ больших, сложных данных. Большие массивы данных также есть в некоторых нейробиологических экспериментах, которые касаются молекулярной биологии – там тоже востребовано программирование. Поэтому тут много вариантов. Я думаю, что вы можете быть востребованы в зависимости от того, что вы хотите получать в обмен на свой труд; чем меньше вы хотите получать, тем больше вы будете востребованы.

Постарайтесь понять, какие вам конкретно интересны тематики. Когда вы говорите про нейробиологию или нейронауку – про что вы думаете, какие темы в вас зажигают интерес? После этого поищите научные группы в академии или исследовательские группы вне академии, если они есть (зависит от тематики – если тематика достаточно прикладная, то они должны существовать). Обратитесь к ним, спросите, что они думают, какие у них потребности, можете ли вы им помочь.

Q: какие советы можете дать тем, кто только-только собирается поступать в магу за рубеж и начинать свой академический путь?

Во-первых, я бы дала совет: академический путь надо начинать до того, как вы поступите в магу. Начинайте уже сейчас. Если мы говорим в плане научно-исследовательской работы – идите в лабораторию как можно раньше и получайте практический опыт, его ничего не заменит. Это – то, что даст вам дополнительные баллы при поступлении в магистратуру.

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

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

Q: на каком курсе вы впервые поехали на стажировку?

Я поехала на стажировку после первого курса магистратуры. Я пробовала подаваться на 3-4 курсах бакалавриата, но меня не взяли – может быть, потому что мои заявки не были хорошо написаны. К первому курсу магистратуры я поняла, как лучше писать. Опять же, мне кажется, сейчас студенты находятся в гораздо лучшей ситуации: когда я училась в бакалавриате, еще были 2007-2011 годы. ВК только появился, там особенно не было полезной информации, мало говорилось о зарубежной стажировке. Интернет был не так доступен, как сейчас; сложно представить, но на первом курсе бакалавриата у меня даже не было компьютера – я пользовалась интернетом в библиотеке университета. Многие вещи тогда были менее известны, и было сложнее. Российские студенты меньше ездили на европейские, американские или азиатские стажировки; меньше было тех, кто уже это сделал – они где-то были, но никто их не знал, и никто не давал никаких советов. Опять же, одна из причин, почему я стала рассказывать про это, весть какую-то просветительскую деятельность для студентов – чтобы больше людей имело возможность попробовать, определить, нравится им это или нет, получить опыт кроме того, что уже есть в университете.

Q: когда нужно начинать планировать научную карьеру? какую специальность желательно изучать на бакалавриате, если ребенок хочет заниматься генетикой?

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

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

Генетика бывает разная. Важно понимать, что не будет 100% совпадения между тем, что человек изучает на бакалавриате и тем, чем он потом будет заниматься, и это нормально. Есть смысл идти на специальность, которая интересна и которую можно изучать на хорошем уровне. На самом деле, не по всем специальностям есть хорошие вузы – особенно есть ограничиваться регионально. Если человек не может уехать учиться в Москву или Питер, то остается гораздо меньший выбор специальностей из региональных вузов. Стоит делать выбор скорее в сторону более хорошей подготовки, чем в сторону 100% совпадения с интересующей специальностью.

Поэтому, если хочешь заниматься генетикой, я бы сказала, что следует сначала подумать: какая именно генетика? Это скорее медицинская генетика, применимая к пациентам, или исследовательская, которая определяет, как это все работает? Или третий вариант – биотехнологическая генетика. Если медицинская – можно идти в медицинский вуз, на медико-биологическую специальность; она подразумевает, что человек работает с пациентами и работает, прежде всего, с генетикой человека. Исследовательская генетика – здесь лучше идти на биофак или на какую-то фундаментальную биологическую специальность; биоинформатика или биоинженерия тоже подходят сюда. Этот вариант – больше про то, как все работает; вы будете исследовать в лаборатории, ставить эксперименты. Третий вариант – биотехнологии – это больше про то, как применять знания генетики для того, чтобы производить что-то в промышленном масштабе, например, лекарства. Тут и выведение каких-то новых растений для того, чтобы создавать новые продукты питания. То есть, здесь вы будете делать скорее что-то промышленное для того, чтобы было производство. Не просто изучать, как все работает, а применять на практике.

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

Q: какие советы можете дать провинциальным студентам, которые хотят в науку? Стоит ли на первых курсах переживать по поводу отсутствия возможности участия в конференциях/практики в лабе?

Главное совет – стараться работать в лабе. В провинции с этим сложнее, но какие-то лаборатории все же есть. Выбирайте из тех лабораторий, которые есть, самые толковые, по более-менее подходящим по интересам темам. Тут так же, как и с университетом: не обязательно 100% попадание. Если ваш первый опыт в лаборатории, или даже дипломная работа не будет на 100% по той теме, которой вы хотите заниматься в дальнейшие годы – это тоже нормально. Если вас научат делать хорошие вещи, если вас научат работать руками, вы узнаете, как вообще строится научный процесс – это уже хорошо. То есть, поищите, какие лабы все-таки есть и постарайтесь начать работать в той, которая достаточно адекватна, где делают экспериментальную работу, публикуют хотя бы какие-то статьи. Тогда вы будете понимать, как все устроено.
В конференциях участвовать, принципе тоже можно. В России достаточно много студенческих конференций, на которые несложно попасть, и, когда вы начнете работать в лабе, у вас будут такие шансы. Но конференции на ранних этапах имеют гораздо меньшее значение для будущего вашей карьеры. Гораздо важнее получить опыт практической работы в лаборатории.

Q: есть ли смысл (и полезно ли это) подаваться на летние стажировки после первого курса, если у тебя не идеальные средние баллы? (но есть олимпиадные заслуги, правда, не на международном уровне)

Во всех случаях, когда меня спрашивают «стоит ли подаваться» — однозначно стоит. Даже если вы никуда не пройдете – вы потренируетесь, и вы впервые это сделаете, у вас уже будет какой-то опыт. В следующей раз подаваться уже будет не так страшно. Если вы отложите это на год – будет все еще страшно, и это будет мешать. Страх несколько блокирует мыслительные способности, и студенты, которые сильно переживают, довольно плохо пишут заявки и допускают ошибки. Это нормально. Лучше этот этап пройти пораньше, а через год у вас будет больше опыта, лучше оценки, и вы сможете подаваться с меньшим страхом. И у вас лучше получится. Хуже от подачи точно не будет.

Q: можно ли совершить подобный путь: программист -> доп. образование Института биоинформатики -> Сколтех или другой вуз -> развиваться в сторону нейроинтерфейсов / нейрофизиологии? Я на втором курсе бакалавриата сейчас

Если отвечать прямо на вопрос – конечно, такой путь можно совершить. Если вы хотите спросить что-то более конкретное, что я могла бы подсказать по поводу этого пути – напишите, пожалуйста, более конкретный вопрос. В широком смысле, в нейронауках работают люди с очень разной изначальной подготовкой. Люди с computer science, биологи, программисты, физики, психологи, инженеры. Бакалаврская специальность не является жестким ограничением, если она все-таки из областей STEM — наука, технологии, инженерия, медицина. Из всех этих областей можно легко перейти в нейронауку.

Q: так чем интересна ваша биография, помимо стандартного пути «после PhD ушел продавцом оборудования»? И того, что вам повезло с лабораторией, которая отправляла сходу на стажировки?

Я не знаю. Я и не говорила, что моя биография чем-то интересна.

если вы не готовы работать каждый день — просто сразу не идите в науку, а то будете тем студентом, на которого мы в лабе потратим время и ресурсы, а потом – «не, ну не мое это»
Если вы уже знаете, что не хотите заниматься наукой – да, не надо. Но, если вы думали, что хотите, пробуете заниматься, а потом оказывается, что – нет, то ничего страшного. Вы по-прежнему нормальный, хороший человек.

Q: существует ли удаленная работа в мире биотехнологий и биоинформатики?

В биоинформатике – 100%, вы работаете с компьютера из любого места. В мире биотехнологий – смотря, чем вы будете заниматься. Если по биотехнологиям — вы поднимаете работу промышленно, там есть разные аспекты; есть работа на производстве, есть R&D – мокрая биологическая работа, которую можно делать только в лаборатории. Но есть также много работы, связанной с анализом данных, которую можно делать удаленно – но она стоит ближе к биоинформатике. Также бывают работы, связанные, например, с анализом литературы – то есть, надо читать эту литературу, вычленять важную информацию. Это очень важно в биотехе и фарме, и это тоже можно делать удаленно. Прежде, чем фармкомпания займется поиском нового лекарства, нужно узнать, что уже было в литературе по этому поводу, какие есть предполагаемые потенциальные вещества – и для этого нужно, чтобы аналитик сидел и читал научные статьи.

Q: как начать академическую карьеру, если ты из очень слабого по науке ВУЗа, и поступил в аспирантуру в другой хороший ВУЗ, но к плохому руководителю?

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

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

Q: не надо идти в аспирантуру, нужно идти в НИИ

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

Аспирантуру или кандидатскую диссертацию тоже можно делать там, не обязательно быть в вузе. Если вы ищете новую лабораторию – рассматривайте все лаборатории вашего города по интересующей вас тематике, в том числе те, что в НИИ.

Q: как часто после русской магистратуры можно поступить в зарубежную? Направления смежные или одинаковые, когнитивные науки

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

Хотя есть и позитивная сторона. Если вы не уверены, что вы хотите еще 4-5 лет заниматься исследовательским проектом, то есть, не уверены, что хотите идти в аспирантуру, то магистратура может быть хорошим решением. Побольше узнать, потестить; может быть, узнать – подходит ли вам заграница, хотите ли вы там жить и работать или нет.

Как часто – я не могу сказать в процентах, потому что не занималась анализом этой информации. Но такое возможно и происходит.

Q: вы упоминали негативные комментарии на хабре, как бы вы посоветовали справляться с негативом публичному спикеру?

Я не знаю. Негативные комментарии всегда получать неприятно, потому что это нормальная эмоциональная реакция любого человека, когда ему говорят, что он вообще никто. С другой стороны – вспомните про позитивные комментарии? Если для кого-то то, что вы делаете, полезно, если кто-то ценит то, что вы рассказываете, если кому-то это помогает, то это достаточно хороший повод, чтобы продолжать это делать. Особенно, если вам нравится это делать.
Люди, которые высказывают негативные комментарии и критикуют все на свете, обычно чем-то сильно недовольны по жизни и ищут, где бы им поделиться своим недовольством. Скажем откровенно, нужно много сил и времени для того, чтобы пойти и написать большой, подробный злобный комментарий — в то время, как не очень понятно, какое ты можешь привнести изменение. В ситуации, когда что-то плохое происходит, можно сказать – ребята, это плохо, нельзя так делать; но, когда ничего плохого не происходит, но люди все равно приходят и в комментариях льют на вас желчь – ну, наверно, у них трудная жизнь.

Q: можно ли экстраполировать опыт поступления в аспирантуру по нейробиологии на другие специальности?

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

Q: встречаю много историй / советов от том, как поступали в областях биологии / медицины / и. т.д., но о своей специальности нахожу мало информацию. Общие шаги поступления одинаковые или есть отличия?

Если говорить про зарубежную аспирантуру, то отличия связаны со страной, со специальностью и с особенностями конкретного университета или научного центра, где вы будете делать аспирантуру или куда вы будете поступать. Но есть и общие советы, главный из которых – ищите хорошего научного руководителя. Это тот, который будет вам хорошим супервайзером, будет вам помогать в вашем проекте, будет вас учить, будет ментором, и которому будет небезразлично, что с вами будет после аспирантуры. Это ключевое, и это одинаково для всех специальностей. В остальном – на самом деле, вопросы подготовки документов не так сложны, их можно найти по любой специальности. Конкретики полно, и это должно быть написано на сайте принимающей организации, куда вы поступаете. А дальше можно поискать какие-то советы. Но в целом, советы по составлению документов вроде «как писать хорошее CV по научной области» или «как написать хорошее мотивационное письмо» — они одинаковы. Я успешно помогала студентам разных специальностей готовить документы – и биологам, и физикам, и химикам, и студентам гуманитарных специальностей, и психологам, и историкам, и экономистам. Все очень похоже. При приеме на работу в нашу компанию идеи те же самые: написание CV и мотивационного письма переносится и на индустрию. Это если вы за этими советами не ищете формальные шаблоны – например, какие слова надо писать – а понимаете, в чем, собственно, идея. Когда вы уловили идею, вы можете везде ее применять.

Q: насколько важно крутое CV при поступлении в магу? Я скоро выпускаюсь и переживаю, что за период бакалавра не было ни статей, ни конференций

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

Насчет CV — не могу ответить на такой вопрос. Все важно, все документы, которые есть в заявке, важны, они все влияют. Чем лучше каждый из документов, тем лучше вся заявка в целом. Нельзя ни на один забивать. Нужно каждый вариант подготовить максимально хорошо, как вы только можете – в этом главная идея.

Q: [продолжение вопроса о плохом руководителе] В нашей лабе это невозможно – есть ли смысл менять город?

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

Q: кстати, что там у вас была за идея про БП и белки теплового шока? Я как-то не видел литературы о связи патогенеза БП с этими белками. Или это предполагались биомаркеры для диагностики? Я недопонял

Идея в том, что белки теплового шока могут помогать предотвращать либо уменьшать количество агрегированных белков в амилоидозах. Я не следила последние несколько лет подробно за этой темой, поэтому не могу сказать, какая есть новая литература, но, в целом: белки теплового шока занимаются укладкой белков, помогают уничтожению либо неправильно сложенных белков, либо клеток, в которых находятся агрегаты белков. Собственно, в этом была идея. Гипотеза нашей работы – той, которую я сделала за год как студент магистратуры, это не была масштабная работа, а маленькое пилотное исследование – была в том, что мы смотрели, будет ли активация белков теплового шока снижать количество нейронов, которые погибли в черной субстанции при вводе туда вещества, название которого я забыла, но которое мешает нормальной очистке поврежденных или агрегирующих белков.

Q: как при поступлении на PhD реагируют на год работы после вуза?

Нормально реагируют в Европе, Америке, Великобритании. Люди далеко не всегда идут в аспирантуру сразу после магистратуры. Они работают иногда в лабораториях как research assistant, или даже в индустрии какое-то время – год, два – и потом все-таки решают поступать в аспирантуру.

Q: можете поподробнее рассказать конкретно про вуз (Ludwig Maximilian University of Munich): что вам в нем понравилось/нет?

Я не могу подробно рассказать, потому что для аспиранта вуз – это не такая важная вещь, как лаборатория. Лаборатория, в которой я работала, находилась даже не в самом вузе, а в научном институте. Формально я была аспирантом этого университета и проходила какое-то количество курсов в нем, но это совершенно не соответствует опыту студента, который учится в бакалавриате или в магистратуре. Вообще, это очень сильный вуз – один из топовых в Германии по life sciences; собственно, он входит в топ-2 вместе с Техническим университетом Мюнхена и соревнуется с ним за первое место. Они отличаются программами; скорее, важнее смотреть учебную программу и выбирать вуз, исходя из этого, а не из каких-то других параметров.

Q: если выбирать между отличным средним баллом и работой в лаборатории / стажировкой, то что лучше выбрать?

Лучше ничего не выбирать. Но тут еще не хватает информации: зависит от того, что вы хотите делать, и средний балл – на каком этапе учебы? Если мы говорим о поступлении за рубеж, то средний балл будет иметь значение. Но также будет иметь значение ваш опыт работы и стажировки. Поэтому, по возможности, не стоит ни на что забивать. Это как в вопросе с документами. Один из параметров, по которым студентов выбирает – это «удалось ли студенту учиться достаточно хорошо», но «достаточно хорошо» – это не означает отличный средний балл. В Германии этого почти никогда не бывает; самый высокий балл – это 1.0, и студентов, которые получают 1.0 по результатам магистратуры – только несколько процентов по всей Германии.
Работать в лаборатории однозначно нужно. И нужно стремиться не просто проводить там больше времени, но и делать осмысленную работу. Если вы приходите туда 5 дней в неделю и работаете по 8 часов, но вам не дают никакие настоящие экспериментальные задания, а дают (условно) мыть пробирки, то это для вас и вашей карьеры бесполезно. Если вы приходите 2 дня в неделю по 4 часа, но у вас есть проект, который вы постепенно продвигаете – делаете эксперименты, получаете данные, анализируете, осмысляете – то у вас будет опыт настоящей исследовательской работы, который вам потом пригодиться. Поэтому думайте о том, как в лаборатории делать осмысленную работу и учиться, а не просто проводить время.

Q: учусь в не очень хорошем вузе, 1 курс, что лучше: переводиться сейчас в вуз сильнее или остаться и поступать уже в магистратуру? Когда стоит готовиться к поступлению в магистратуру? Неудачный опыт поступления в бакалавриат, не хотелось бы повторить с магистратурой

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

По поводу магистратуры – тут очень зависит от вуза. Если у вас есть какие-то целевые вузы – посмотрите, какие там требования для магистратуры, узнайте, что там ожидается, пообщайтесь с теми, кто сейчас там учится, узнайте, как их отбирали. Тогда вы поймете, когда вам нужно начать готовиться и что готовить.

Q: подтвердите или опровергните любимое утверждение российских либералов от науки: «на западе вся наука делается в вузах, никаких НИИ и академии наук там нету, это пережиток совка»

Академии наук есть, хотя они выполняют совершенно другую функцию, чем в России. Надо сказать, что в разных странах академии наук выполняют различные функции – но, в основном, это более репрезентативная функция; это, скорее, про почетность. Стать академиком в Германии – почетно, но академия наук не занимается распределением финансов, у нее нет своих институтов, ее функция – скорее, репрезентация ученых в государстве и в общественном поле.
НИИ, естественно, есть. В разных странах они устроены по-разному, и финансируются из разных источников. Например, в США есть частные институты (и университеты тоже), которые финансируются из частного капитала. В Германии есть четверка больших сообществ: сообщества Макса Планка, Гельмгольца, Лейбница и Фраунгофера. Они имеют смешанное финансирование – государственное и из частного капитала.

Так что НИИ – есть, и у них бывает различное устройство и финансирование. То, что «вся наука – в вузах» — это, конечно, неверно.

Q: а наука в частных компаниях?

У частных компаний есть R&D с разной степенью прикладных вопросов и с разной степенью возможности работы над неприкладными вопросами. Например, в Google есть отдел, который занимается квантовыми компьютерами, хотя эти компьютеры пока не могут решать никаких задач и неизвестно, когда смогут. Это – исследование, идущее на пользу науке.

Q: R&D отделы коммерческих компаний — не совсем то, никто не даст вам публиковать результаты, например

R&D могут публиковать результаты. Зависит от того, что это за результаты и как они могут быть использованы. Компании публикуют клинические исследования, например.
Опять же, защитив патентом какое-то открытие, компания может обезопасить себя и потом опубликовать данные, если они имеют исследовательскую ценность.

Q: а насколько важно для работы в области нейронаук иметь профиль магистратуры такой же

Нет, на самом деле; я уже говорила, что нейронауками занимаются не только нейроученые, которые имеют специальное образование. У меня тоже нет образования нейробиолога из университета – я закончила магистратуру по профилю «физиология». В научных лабораториях, которые занимаются нейроисследованиями, есть математики, биологи, программисты, физики, инженеры. Потому что в нейронауках много разных ответвлений, много вопросов, которые нужно решать. В том числе разрабатывать устройства, программировать, анализировать данные. Так что можно иметь и другой профиль. Ищите, какая тематика вам интересна и думайте, как вы можете приложить там свои знания и умения.

Let's block ads! (Why?)

[Перевод - recovery mode ] История возникновения CUPID (критика SOLID)

Какие бы вы предложили принципы для современной разработки программного обеспечения?

На прошлом виртуальном митапе Extreme Tuesday Club мы обсуждали, не устарели ли SOLID принципы. Не так давно я толкнул шутливую речь на эту тему, так что один из организаторов митапа спросил у меня - раз я несогласен с SOLID, чем бы я его заменил. Так получилось, что я уже думал об этом какое-то время, так что я решил предложить пять своих принципов, из которых получился акроним CUPID.

Статья не про эти принципы, об этом будет мой следующий пост. Эта статья о том, почему я думаю, что они нужны. Я бы хотел рассказать всю историю и объяснить, почему я никогда не покупался на SOLID. Поговорим об этом.

Почему неправилен каждый элемент SOLID.

PubConf был изобретён как разновидность афтепати к конференциям NDC. В соответствии с именем, место происходит в пабе. Несколько спикеров выступают в стиле Ignite - 20 слайдов, 15 секунд на слайд, автопродолжение - и аудитория ревет, хлопает, мечет молнии и благодарит в соответствии с местом, где это происходит. Победитель что-нибудь получает, все здорово проводят время.

Несколько лет назад я был приглашён спикером на PubConf эвент в Лондоне. Мне нравится челлендж выступлений с ограничениями. Я долго думал про SOLID принципы Роберта Мартина, и мне показалось забавным опровергнуть каждый из этих принципов, пытаясь сохранить при этом серьёзное лицо. Также я хотел для каждого пункта предложить альтернативу.

Некоторые речи пишут сами себя: я понял, что могу использовать один слайд на каждый принципе, один, чтобы опровергнуть его, один, чтобы предложить альтернативу - и так 5 раз. Итого 15 слайдов, по 45 секунд на принцип. Добавь начало и конец - и вот мои 20 слайдов!

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

После конференции я выложил слайды на SpeakerDeck и целая куча людей ,которых я раньше не встречал, встретили в штыки сначала мою речь, потом детали моих слайдов, а потом и меня лично.

Посколько я никогда это не записывал, вот примерная схема того, как пошёл разгвор. Держите в голове, что на каждый принцип у меня было 15 секунд на то, чтобы его представить, 15 секунд на то, чтобы его опровергнуть, и 15 секунд на альтернативу. Готовы? Поехали!

Принцип единой ответственности (SRP)

SRP принцип утверждает, что код должен делать только одну вещь. Другое определение гласит, что код должен "иметь только одну причину для изменений". Я назвал это "Бессмысленный Слишком Общий Принцип" (в оригинале “Pointlessly Vague Principle” - прим. переводчика). Что вообще означает "одна вещь"? Является ли DataProcessor ETL (extract-transform-load - извлечение данных - их трансформация - их загрузка) одной вещью или тремя? Любой нетривиальный код может иметь любое количество причин, чтобы измениться, которые вы могли или не могли учитывать, так что, опять же, для меня это несёт не очень много смысла.

Вместо этого я предложил писать более простой код, используя для метода измерения эвристику "Помещается в Голове". Это означает, что вы можете утверждать что-то только о том, что помещается в вашей голове. Напротив, если что-то не помещается в вашей голове, то вы не сможете рационально утверждать что-то об этом предмете. Код должен помещаться в голову на любом уровне детальности, идёт ли речь о методе/функции, классе/модуле, компоненте, сделанном из классов, или о целых распределённых приложениях.

Вы можете спросить: "О чей голове речь?". Для целей эвристики я предположил, что владелец этой головы может читать и писать код в языках, которые используются в проекте, а также знакомство с доменной областью. Если для целей разработки требуются более эзотерические знания, например, знания недокументированных внутренних систем для интеграции, то это должно быть специально обозначено в коде так, чтобы знание об этом поместилось в голову.

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

Принцип открытости-закрытости (OCP)

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

Это был мудрый совет во времена, когда код:

  • Было дорого изменять: Попробуйте поменять маленький кусок кода, а затем сделать компиляцию и линковку миллионов строк в C++ в 1990 году. Я подожду.

  • Рискованно изменять: у нас не было ни правил рефакторинга, не было IDE с нормальным рефакторингом (кроме Smalltalk), не было практик разработки.

  • Самое важное, что можно добавить: вы писали какой-то код, помещали его в систему контроля версий (если использовали её, то, скорее всего, использовали RCS или SCCS (подробнее о них тут - прим. переводчика)), а затем переходили к следующему файлу. Вы транслировали спецификацию в код, по одному кусочку за раз. Переименовывать вещи было редкой практикой, не говоря уже о переименовании файлов. CVS, которая стала вездесущей системой контроля версий, буквально забывала всю историю файла, если вы его переименовывали, поэтому переименованию было такой редкостью. Этот пункт легко проглядеть в век автоматического рефакторинга и CVS, основанных на целом наборе изменений (changeset-based version control.)

Сегодня, подходящий совет, чтобы менять код, звучит так: Меняйте код, если он должен делать что-то ещё! Звучит банально, но сейчас мы воспринимаем код, как, скорее, податливую глину, нежели чем в старые добрые деньки, когда код напоминал строительные блоки. Между спецификацией и кодом не было цикла обратной связи, в то время как сейчас у нас есть автоматизированные тесты.

В этом случае я вывел "Принцип Аккреции Круфта". (Cruft Accretion Principle) (Аккре́ция(лат. accrētiō «приращение, увеличение» от accrēscere «прирастать») — повышение массы одного космического объекта за счет гравитационного притяжения. - прим. переводчика)

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

Принцип подстановки Лисков (LSP)

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

Однако, язык, который использует LSP ("подтипы"), в сочетании с тем, что большинство разработчиков объединяет вместе "подтипы" и "подклассы", и ожидание "желаемых свойств" означает, что он пытается аппелировать к моделированию сущностей из 1980 года, со всем его "является (is-a)" и "имеет (has-a)" видами наследования.

В контексте моделирования, когда мы нож используем в качестве отвертки, а многие объекты наследуются видами: "ведёт-себя-как (act-like-a)", "иногда-используется-как (sometimes-be-used-as)" или "подойдет-если-не-сильно-приглядываться (pass-off-as-a-if-you-squint)"; в этом контексте что мы действительно хотим, так это маленькие, простые типы, которые мы можем композировать в любые насколько угодно сложные структуры, и примириться со всеми нюансами, которые это вызовет. Мой совет, внезапно, "писать более простой код", о котором легко рассуждать.

Принцип разделения интерфейсов (ISP)

Из всех принципов этот разобрать - как два пальца об асфальт. По каким-то причинам, этот пункт вызвал больше всего споров, но как по мне, его развенчать проще всего. Во время исследований при подготовке речи, я обратил внимание, что этот паттерн появился, когда Роберт Мартин столкнулся с God object, во время работы над софтом в Xerox. Всё происходило в классе под названием Job. Его подход к упрощению был в том, чтобы найти все места, где он использовался, выяснить, какие методы "сочетаются друг с другом" и объединить их в отдельный интерфейс. Это принесло сразу несколько преимуществ:

  • Сбор связанных методов в разных интерфейсах показал все различные обязанности, которые выполнял класс Job.

  • Присвоение каждому интерфейсу имени, раскрывающего намерение, упростило понимание кода, чем просто работа с объектом Job, встречающимся то тут, то там.

  • Создана возможность разбить класс Job на более мелкие классы, реализующие свои интерфейсы. (Возможно, интерфейс им больше не нужен.)

Всё это имеет смысл, просто дело в том, что это не принцип. Это паттерн.

Принцип хорош в любом контексте: "Сначала пытайтесь понять, а потом быть понятым", "Будьте добры друг к другу".

Паттерн это стратегия, которая хорошо работает в определённом контекесте (God-класс). У неё есть преимущества (меньшие компоненты) и компромиссы (больше классов, которыми нужно управлять). Принципом было бы, скорее, "вообще не устраивайте в коде бардак, который к такому привёл!".

Так что моя позиция в споре была такая: если это и был принцип, то это был "Принцип Двери из Конюшни" (Stable Door Principle). (дверь, разделенная на две части - верхнюю и нижнюю. Представьте, как сверху в открытую часть выглядывает лошадка - прим. переводчика) Если у вас изначально были небольшие, основанные на ролях классы, то вы бы не оказались в ситуации, где пытаетесь декомпозировать этот огромный запутанный беспорядок.

Конечно, иногда мы оказываемся в таком положении. Тогда разделение интерфейсов - идеальная стратегия, чтобы хоть немного упорядочить бардак, наряду также с созданием тестами характеристик и другими советами Майка Фезарса из прекрасной книги Working Effectively With Legacy Code.

Принцип инверсии зависимостей (DIP)

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

Реальным принципом должна была стать опциональная инверсия. Зависимость интересна нам только тогда, когда есть несколько способов её предоставления, и вам нужно сделать инверсию отношений только если вы считаете, что в будущем это станет необходимо. Это довольно высокая планка, а чаще всего вам просто нужен только метод main.

Если вместо этого вы присоединитесь к идее, что все зависимости всегда должны инвертироваться, то вы закончите с J2EE, OSGi, Spring или любым другим фреймворком "декларативной сборки", где сама структуризация компонентов - закрученный лабиринт конфигураций. J2EE заслуживает отдельного упоминания, что каждый тип инверсии - EJB, servlets, web domains, remote service locations, даже конфигурация конфигураций - должен принадлежать разным ролям.

Существуют даже целые кодовые базы, где каждый класс реализует точно один интерфейс, который существует, чтобы удовлетворить DI фреймворк, или инжектнуть мок или стаб для автоматизированного тестирования. Обещание, что "с DI вы сможете легко поменять базу данных" испаряется как только вы, кхм, пытаетесь поменять базу данных.

Большинство зависимостей не нуждаются в инверсии, поскольку большинство зависимостей не являются одним из вариантов внедрения, это просто то, как мы делаем вещи на этот раз. Моё - думаю, уже неудивительное предложение - писать более простой код, нежели сосредотачиваться на переиспользовании.

«Если они тебе не понравились, у меня есть ещё»

Когда я смотрю на SOLID, я вижу сочетание вещей, которые когда-то были хорошими советами, шаблонов, применимых в контексте, и советов, которые легко применить неправильно. Я бы не стал предлагать это как бесконтекстный совет начинающим программистам. Так что бы я сделал вместо этого? Я подумал, что для каждого из принципов и паттернов SOLID может быть однозначное соответствие, поскольку в любом из них нет ничего плохого или неправильного, но, как говорится, «Если бы я поехал в Дублин, я бы не стал не начинать отсюда ».

Итак, учитывая то, что я узнал о разработке программного обеспечения за последние 30 лет, могу ли я предложить какие-либо принципы вместо этого? И могли ли они образовать емкую аббревиатуру? Ответ положительный, и я изложу их в следующей статье.

Let's block ads! (Why?)

Ещё один поиск Вк по фото

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

1. Предыстория

В первой половине 2016-го в свет вышел нашумевший FindFace, позволяющий загрузить фото человеческого лица и находить соответствующий профиль Вк. Он вызвал большой общественный резонанс, привёл как к поиску девушек по скрытым фоткам на эскалаторах в метро и к обнародованию порноактрис с неприятными последствиями для их близких, так и к находкам потерянных близких, к нереально быстрому поиску преступников по случайным кадрам с камер, прям как в американских фильмах, только наяву.

В то время мне об этом сервисе говорили и ленты новостей, и друзья, я отвечал "ну да, прикольно", и только. Но спустя пару лет, в начале октябре 2018 на каком-то айтишном форуме я захотел связаться с одним пользователем по специфическому вопросу, вот только он туда уже давно не заходил. Зато там было его хорошее фото, и тут-то я вспомнил про крутой сервис! Побежал на их сайт и разочаровался – в сентябре 2018, буквально за месяц, они перестали предоставлять свои услуги физ.лицам, и бесплатно, и даже за деньги, перейдя в сегмент b2b и b2g. Оно и понятно, пиар уже сработал, а этических вопросов так возникает куда меньше. Но меня, законопослушного гражданина, это огорчило. И не только меня: фан-группы ФайндФейса пестрили сообщениями о том, что люди готовы заплатить в 10 раз больше, лишь бы им помогли найти нужного человека.

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

Пару рабочих дней я размышлял, что же сложного в создании такого сервиса, который бы и точно искал людей, и по всему Вк? Решил, что ничего, ведь у меня тогда уже были базовые познания в data science, разработке и администрировании. Поэтому в пятницу, приехав с работы домой, я взялся за дело. За вечер я накидал скрипт, который парсит профили Вк, находит фото, индексирует по ним лица и сохраняет в БД. Потом просидел ещё пару суток почти без сна, заставил это дело безостановочно работать на своём сервере. Началась новая трудовая неделя, я был очень уставший, но ещё больше довольный и полный энтузиазма! Ведь мой скрипт медленно, но безостановочно бежал по всему Вк.

2. Техническое устройство

2.1. Индексирование

Как вы считаете, что происходит после того, как вы отправляете запрос в любую крупную поисковую систему? Не важно, поиск текста в Яндексе, Google или поиск лиц в FindFace или моём сервисе. Многие, особенно не-айтишники, с трудном представляют внутренние механики технических процессов, а они бывают нетривиальны даже казалось бы в простых задачах. В случае поисковых систем магия заключается в том, что при получении запроса они не начинают обегать все страницы в интернете, ища там ваш текст, или весь Вк, сравнивая вашу фотку со всеми подряд, – это бы занимало астрономические объёмы времени. Вместо этого, поисковые системы сперва индексируют нужные данные. В случае текста (и подобных тексту данных вроде ДНК) в ближайшем приближении могут использоваться хэш-таблицы или префиксные деревья. В случае фоток тоже нужны индексы, которые сильно сократят время поиска. Для этого я использовал библиотеку face_recognition, которая позволяет преобразовать фото лица, если правильно помню, в 128-мерный вектор признаков со значениями от -1 до 1 (далее буду называть его просто хэш). Для поиска человека по фото, нам нужно просто пробежаться по всем фото из коллекции, считая евклидово расстояние между векторами-хэшами из запроса и набора – подобный пример, реализованный на Питоне, доступен на сайте упомянутой библиотеки. Да, такая операция поиска тоже не дешёвая, но об этом позже.

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

Конечно, не только лимиты АПИ повышать надо, но и объёмы CPU. Изначально я развернул скрипт на маленьком VPS, который создавался для простого личного сайта. В подмогу ему, я взял ещё один VPS, в несколько раз мощнее. Потом я решил, что и этого мало, взял ещё и целый выделенный сервер, который сильнее моего собственного рабочего компьютера :D Не энтерпрайз-левел, но производительность стала меня устраивать, хотя расходы и выросли до 15 тысяч руб/месяц, что для меня тогда было весьма ощутимой тратой.

2.2. Подобие архитектуры и DevOps'а

Если у вас есть опыт в бэкэнд разработке, то сразу встаёт вопрос, как я заставил несколько серверов работать в тандеме, а не независимо, дублируя одну и ту же работу? На самом деле, решение классическое: один микросервис брал на себя роль ведущего, мастера, хранил состояние всей системы, и выдавал задания объёмом в тысячу профилей Вк воркерам, которые быстрее или медленнее их индексировали, а результаты, в том числе промежуточные, возвращали мастеру; если же мастер за определённый промежуток времени не получал ответа от воркера, он давал это задание другому, с учётом промежуточного прогресса.

Кстати, воркеры работали в несколько потоков. Да, Питон, благодаря Global Interpreter Lock, не умеет в полный параллелизм, но много времени уходило на выгрузку фоток, а IO-операции хорошо параллелятся. Вдобавок, это позволило легко назначить каждому потоку свой токен доступа и гибко настраивать загруженность каждой машины.

Для автоматизации настройки окружения, токенов и т.п были написаны скрипты на Питоне, которые подключались к целевой машине по SSH и ставили всё что нужно. Позже я узнал, что у меня костыльный велосипед, есть качественные решения, но всё равно было интересно посмотреть подноготные детали. Из прикольного, пришлось также разобраться, что есть разные ВМ и средства виртуализации, что некоторое ПО не работает в определённых конфигурациях, благодаря чему виртуалки на Xen и OpenVZ с казалось бы одинаковыми ресурсами могут отличаться в цене на 40%.

2.3. Поиск

Помимо ролей мастера и воркера, есть роль поискового микросервиса. Проиндексированные фото Вк и айдишники их профилей сохраняются в БД, точнее, MySQL v5.7 – и алгоритм поиска я переписал с Python на SQL, что позволило сильно ускорить вычисления и выйти на больший масштаб. Но с ростом данных этого всё равно было очень мало, я думал над оптимизациями, старался переиспользовать свой опыт big data аналитики с работы, экспериментировал с разными структурами запросов и генерацией SQL-запросов Питоном, это позволило ускорить вычисления в несколько раз, что мило, но всё равно мало.

Потом я решил сделать поиск двух-этапным: преобразовывать хэши-дробные-векторы в небольшой массив байт, сохраняя каждый признак в два бита: v>0.1 и v<-0.1 (здесь), затем сравнивая число совпавших бит такого хэша у целевого лица и всех лиц в БД, а потом фильтруя записи в БД по какому-то трешхолду, отправляя на более точное и медленное сравнение только потенциальных кандидатов. Пришлось повозиться и переехать на MySQL v8, т.к в 5.7 бинарных операций нет. Но это позволило ускорить поиск ещё почти в 30 раз – а это уже клёво ^_^

Вообще, поиск можно было бы улучшать и дальше – возможно подобрав более эффективные коэффициенты в операции выше, или переделав этот хэш, ещё было бы круто добавить параллелизм, которого в MySQL из коробки нет, партицирование, шардирование, и искать многопоточно; для этого в планах был переезд на PostgreSQL.

2.4. Другие механики

Когда у меня накопился большой объём данных, и мой сервис научился находить некоторую долю людей по случайным фоткам за приемлемое время, я стал мечтать дальше и задумываться о развитии функционала.

Ускорять время поиска можно не только ускорением самого поискового алгоритма, но и снижением выборки, например, ища профили только среди участников каких-то групп Вк. Ясное дело, здесь встаёт вопрос ограничения размера этой выборки, т.к делать запрос с "ISIN (десятки тысяч айдишников)" такое себе, а вот на паре сотен и даже тысяч работает в разы быстрее, чем полный проход БД.

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

Если идти ещё дальше, то можно индексировать не только Вк, но и ВотсАп, Тг перебрав все русские номера, возможно частично FB, Twi, Ig. Но это уже совсем будущее, я решил двигаться в сторону скорейшей апробации и монетизации того, что есть уже.

3. Заключение

3.2. Happy ли end?

Перед разработкой ЛК, интеграции платежей и т.п декора, я решил больше разобраться в общественных настроениях, т.к некоторые мои знакомые выражали сомнения, что им было быы приятно пользоваться, а ещё серьёзнее – быть доступными в таком сервисе. Помимо этого, примерно тогда же Вк ввёл закрытые профили, чтобы переживающее о своей безопасности люди могли спокойно скрываться, и анализируя статистику своих воркеров я видел, что число таких профилей всё растёт.

Я написал в тех поддержку Вк (тогда они ещё отвечали, ахах), аккуратно представился студентом, что хочу проводить социологические исследования скандируя большие объёмы данных Вк, в т.ч фото, ФИО и описание. Что на самом деле было правдой, с учётом моего интереса к аналитике и психологии. Они ответили, что ради статистики и небольших выборок в целом не против, но точно против какой-либо идентификации. А ещё "порадовали" тем, что будут и палки в колёса АПИ вставлять таким сервисам, и участвовать в разработке/внедрению законов, регулирующих эту деятельность. А недавно, уже в наше время, вышел законопроект, запрещающий автоматизированную обработку данных с сайтов, что по сути полностью блокирует подобные сервисы с парсингом.

В связи с этим, я принял решение о закрытии проекта, хоть это и было печально: в феврале 2019 у меня уже было проиндексировано 25% всего Вк в гигабайтах БД, притом не за бесплатно. Но у меня уже тогда был опыт различных проектов, поэтому я не жил розовыми мечтами об успешном успехе, а старался извлечь другую пользу и просто фан (:

Кстати, только в процессе написания этой статьи я понял, что принявшись за эту работу, я совсем забыл про исходный мотив, про того человека с какого-то сайта и свой вопрос к нему xD

После завершения описанной истории, я решил опубликовать исходники, но т.к там в истории коммитов засветились токены, то перезалил в новый репозиторий. Но код действительно такой, что мне самому туда страшно заглядывать :D
https://github.com/AivanF/ID-Detective-public

3.2. Польза

Здесь, как и в других своих пет-проектах и стартапах, я набрался много опыта:

  • Разобрался с многопоточностью в Питоне.

  • Покопался в специфических вопросах оптимизации MySQL запросов.

  • Научился строить организацию приложений, файлов и комментов на будущее, чтобы оно не превращалось в спагетти.

  • Освоил работу из кода с SSH для настройки окружения, понял, насколько чудесен Ansible.

  • Разработал микросервисную архитектуру из клея и палок, что затем позволило легко понять концепции Kubernetes.

И всё это мне очень пригодилось в последующих работах и проектах.

3.3. Мораль

Выводы каждый сделает свои, но главное – не бойтесь пробовать, учиться и искать себя! Надеюсь, вам было интересно :)

Let's block ads! (Why?)