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

Блог компании ruvds.com

Анонс как Data Science продает вам рекламу

14.09.2020 12:17:21 | Автор: admin


Сегодня, в 20:00 в прямом эфире выступит Никита Александров Data Scientist в Unity.

Никита закончил ФКН ВШЭ, во время последнего курса получил стипендию Эразмуса и съездил на семестр по обмену в Финляндию. Несмотря на то, что Никита получил оффер на работу в Токио, он решил поступить в магистратуру университета Аалто. Магистратуру он не закончил и ушел работать Data Scientistом в Unity Ads, где сейчас улучшает алгоритмы конверсии. Никита расскажет о том, как устроен IT-рынок Финляндии, что там есть интересного и какие задачи решают дата-саентисты в Unity. Кроме того, Никита готов поделиться инсайдами, как правильно рекламировать свою игру при помощи Unity, чтобы ее чаще устанавливали.

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




Эфир разделится на три блока


Что ловить айтишникам в Финляндии?

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

Про Data Science

  • Что дата-саентисты делают в Unity: что они делают именно в Unity, что значит эта позиция в Unity.
  • Что конкретно я делаю в Unity как дата-саентист.
  • Как улучшить конверсию рекламы, не меняя продукт: техники доступные дата-саентисту.
  • Как изменение настроек приватности в iOS 14 может повлиять на мир таргетированной рекламы в гейм-индустрии.
  • Федеративное обучение: что это и может ли это решить проблему с iOS 14.

Как рекламировать свои игры в Unity

  • Зачем разработчики покупают трафик прямо в Unity когда есть Facebook и Google.
  • Как устроен показ рекламы в Unity.
  • Разные виды трагетированных реклам и их эффективность: баннеры, видео, играбельные рекламы, за вознаграждение и остальные.
  • Как дата-сайнс помогает зарабатывать на хлеб гейм-девелоперам.
  • Техники, которые позволяют эффективно и постоянно продвигать свою игру в рекламе: что делать, чтобы игру устанавливали.

Вы можете задать Никите вопрос здесь в комментариях, в инстаграме и прямо во время эфира.



Куда жать, чтобы не пропустить эфир?


Жмите на колокольчик на ютубе или подписывайтесь на наш инстаграм, тогда вам придет уведомление о начале эфира.

Еще раз напоминаем дату и время: понедельник, 7 сентября, 20:00



До встречи в эфире!




Подробнее..

Новичкам фондового рынка честный разговор о валюте

15.09.2020 12:21:41 | Автор: admin
xxx: я сегодня сделал полезное дело для нашей страны!
yyy: это какое же?
xxx: обменял почти все бывшие у меня рубли на доллары! C моим везением теперь доллар точно обвалится (

Bash.im, начало истории чувака с долларами


Знаете ли вы, что падение рубля не печалит часть жителей нашей страны? Среди них немало айтишников прежде всего это ребята, получающие заработную плату в валюте или в привязке к валюте (прикольно: ты ничего не просишь, интенсивность труда не меняешь, просто живёшь в удивительное время и зарплата растёт сама по себе). Кроме айтишников, это некоторые банки, компании, получающие валютные платежи за свои продукты и услуги, рачительные накопители долларов и евро под матрасом и т.д. Естественно, такое положение дел с курсом валют (высокая волатильность, нестабильность и резкая реакция на политические и экономические триггеры) прекрасный фон для того, чтобы попробовать заработать на курсовых разницах валют, причём не только пар USD-RUB, EUR-RUB и USD-EUR, но и других. Ну что, пора бежать в обменник? Ни в коем случае!


Доллар рубль увидел

Предыдущие статьи цикла:

  1. Новичкам фондового рынка: честные разговоры о трейдинге
  2. Новичкам фондового рынка: честный разговор об акциях
  3. Новичкам фондового рынка: честный разговор об облигациях

Важный Disclaimer


  • Наша серия статей для новичков всех специальностей, а не только для программистов, аналитиков и математиков. Именно поэтому мы не окунаем читателей в разработку своих алгоритмов и сложную аналитику.
  • Мы знаем сами и убеждаем вас работа на бирже не быстрый и не лёгкий способ заработать. Заработать на основной работе и фрилансе проще и эффективнее. Но поскольку интерес к фондовым инструментам непрерывно растёт, мы хотим осветить эту тему доступно для всех. Во многом мы стараемся предостеречь читателей от потери больших сумм.
  • Мы не продаём никакие финансовые продукты и стратегии, единственное, что есть у RUVDS для желающих попробовать себя на фондовом рынке, это сервера с предустановленным ПО METATRADER 5 (такая классная платформа со своим языком программирования и огромными возможностями). Такие же у нас есть и для любых других целей.
  • Если у вас есть вопросы и пожелания, пишите в комментариях. Возможно, в конце цикла мы выпустим публикацию с ответами на наиболее важные вопросы.

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

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

  • Валюта ликвидна (если вы случайно не инвестируете в ботсванскую пулу) её можно быстро продать и купить в тот момент, когда вам это необходимо.
  • Механизм курсовых разниц понятный и относительно предсказуемый, особенно если изучить вопрос на исторических данных.
  • Можно создавать наборы валют в инвестиционном портфеле, сочетая их по доходности и рисковости.
  • Валюта сама по себе актив и не требует дополнительных инструментов для работы с ней. Облигации, акции, евробонды, опционы и т.д. только по желанию инвестора.
  • Можно начать работать на валютном рынке с относительно небольшого объёма вложений.

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

Для ленивых, терпеливых и консервативных


1. Классические банковские операции


Самый простой способ обернуть рубли в валюту пойти в банк и купить одни деньги за другие и унести их домой. Это долгосрочная инвестиция, которая за несколько лет может принести 15-20% доходности (а то и больше) даже если деньги просто будут лежать дома в сейфе или под подушкой. Это самая что ни на есть консервативная стратегия, которой следуют сотни тысяч граждан нашей страны, особенно в момент, когда доллар или евро начинают подавать сигналы к росту.

Однако нужно понимать, что банк это коммерческая структура, основной целью деятельности которой является извлечение прибыли. Значит, на ваших валютных операциях банк хочет заработать и зарабатывает за счёт внутреннего курса банка финансовое учреждение имеет право устанавливать курс значительно выше биржевого, а также устанавливать высокую разницу цены покупки и цены продажи валюты. Так банк защищает себя от массового ажиотажа, сброса/скупки валюты и ещё нескольких банковских рисков. К тому же, у каждого банка свой курс и в соседних отделениях банков могут быть более выгодные условия. Поэтому перед тем, как решиться купить валюту, посмотрите сайты доступных вам банков и выберите наиболее выгодный вариант именно в вашем регионе (курс в одном и том же банке для разных регионов тоже разный), особенно, если речь идёт о суммах свыше 1000$. Разница может составлять даже несколько рублей, особенно в момент интенсивных колебаний курса.

Увы, банковские операции непригодны для игры на курсовой разнице, всю вашу потенциальную прибыль сожрут маржинальные накрутки банка, поэтому бегать покупать и продавать валюту в коротком интервале времени занятие бестолковое (если конечно это не август 1998, 2008, 2014 и т.д. кстати, в такие острые периоды вам могут сказать, что в кассе нет достаточного количества купюр).

Плюсы

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

Минусы

  • Переплата комиссии банку
  • Высокий спред (разница курса покупки и продажи)
  • Долгосрочная, пассивная инвестиция

Осторожно!

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


Уже прекрасное далёко прошлое, в смысле

2. Банковский валютный депозит


На момент написания этой статьи (09.2020) ставка по валютным депозитам в российских банках 0,6 0,8%. Бывают значения и меньше. Действительно, банковский валютный депозит имеет крайне маленькую доходность ввиду того что банки страхуют себя от валютных рисков. Получается, по сути, это способ сохранить деньги от минимальной инфляции и не держать их дома? Ну отчасти да, потому что они сами вырастут.

Возьмём один и тот же вклад Банка N с рублёвой ставкой 6,8% годовых и долларовой 0,7% готовых. 14 января 2020 года мы вышли с праздников и положили на год 10 000$ и по тем временам равный рублёвый аналог 609 000. В итоге к концу срока вклада рублёвый вклад заработает 41 412, а долларовый 70$, по сегодняшнему курсу всего 5 142. Скучно. Но доллар 14 января стоил 60,9, сегодня 73,46$, т.е. 125 600. Так что хранение денег на долларовом вкладе кажется более чем разумным при внешне небольшой доходности.


Плюсы

  • Доступный способ приобретения валюты от 1 у.е.
  • Распространяется программа страхования вкладов
  • Не нужно прятать деньги дома
  • Гарантированно защищённые купюры при снятии денег

Минусы

  • Низкая процентная ставка
  • Страновой и отраслевой риск да, он минимален, но он есть (к примеру, хождение доллара и евро будет ограничено)
  • Пассивное инвестирование

Осторожно!

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

3. Покупка валюты на бирже


А что, если покупать валюту прямо на Московской бирже по установленному ей справедливому курсу? Вот теперь можно перестать зевать над статьёй это уже интереснее. Действительно, любое частное лицо может покупать валюту без накруток коммерческих банков на свой брокерский счёт или на свой ИИС (что ещё выгоднее) для этого нужно заключить договор с брокером и приступить к покупке. Однако на Московской бирже пока существует минимальный лот 1000 у.е. Почему пока? Потому что уже который год Мосбиржа обещает начать торговать с лотом менее 1000 у.е., а именно от 1 цента (0,01 у.е.), на данный момент это обещание распространяется на 2021 год, но история уже много раз откладывалась. Поэтому пока говорим о лоте в 1000 у.е. Но вообще это очень круто вы покупаете валюту по той же цене, что и банки.

Покупка валюты через брокера на Московской бирже имеет несколько дополнительных преимуществ:

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

Наконец, подключаясь к брокеру, вы получаете возможность совершать спекулятивные сделки с валютой на фондовом рынке: покупать и продавать, работать с доступными валютами разных стран. Это очень удобно делать в MetaTrader, который кроме всего прочего поддерживает собственный встроенный язык программирования MetaQuotes Language 5 (MQL5). Ну и при торговле валютой лучше избегать чужих глаз и доступа посторонних рук и лапок в ваш аккаунт поэтому мы советуем использовать мощный и безопасный сервер с MetaTrader 5 на борту. Очень удобно как для новичков, так и для опытных инвесторов не зря серверам RUVDS доверяют известные компании-брокеры. Так вот, настройте MetaTrader и работайте с валютными позициями, диверсифицируйте свой портфель. Валюта всегда интересный и ликвидный актив.

Плюсы

  • Возможность работать с биржевыми сделками, т.е. зарабатывать на минимальных колебаниях курса
  • Возможность покупать валюту по биржевой цене
  • Безопасность и подконтрольность сделок
  • Множество мобильных решений для работы с валютными активами

Минусы

  • Высокий порог вхождения
  • Необходимость выплат комиссий брокеру
  • Вместе с биржей вы несёте все политические, экономические и страновые риски

Осторожно!

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

4. ETF и ПИФ


Паи ПИФ (паевых инвестиционных фондов) и акции ETF (Exchange Traded Fund, биржевой инвестиционный фонд) это тот случай, когда инвестор покупает долю активов, доверяя свои деньги управляющей компании. ETF интереснее ввиду того, что он ликвидный биржевой инструмент, ПИФ подходит для пассивного, консервативного инвестора.

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

При прочих равных рекомендую вам открывать ИИС и инвестировать в надёжные и удобные ETF. С высокой долей вероятности это будет успешная инвестиция.

Плюсы

  • Стабильные, надёжные инструменты
  • Подходят любому инвестору с любым уровнем подготовки
  • Возможно приобретение небольшого пая

Минусы

  • Не самые высокодоходные инструменты

Осторожно!

Покупайте ПИФы и ETF только у проверенных компаний, не ведитесь на новые и незнакомые предложения.


Консервативный инвестор

Для любителей ковырять цифры и графики


5. Иностранные акции


С валютным счётом вы можете выйти на иностранную биржу или Санкт-Петербургскую биржу через брокера и добавить в свой инвестиционный портфель акции зарубежных компаний, среди которых много инструментов для любой стратегии инвестирования: от ультраконсервативной до агрессивной (например, акции технологических компаний, недавно вышедших на IPO).

О некоторых нюансах работы с любыми акциями можно почитать в нашей статье, но оговоримся о важном: вам нужно хорошо знать английский язык, чтобы проводить фундаментальный анализ. Google Translate не поможет вам понять тончайшие нюансы отчётности компаний, событий и новостей. Без языка вам будет не хватать этой информации, а совершать сделки с акциями без развёрнутой аналитики это сплошной риск и глупость.

6. Еврооблигации, опционы и фьючерсы


Еврооблигации (евробонды) это ценные бумаги, номинированные в валюте другой страны. Это может быть любая валюта, не обязательно евро просто название исторически сложилось. Евробонды представляют собой долгосрочные (до 40 лет) долговые обязательства с правом получения купонного дохода и погашения облигации по номиналу. Покупка таких облигаций и сохранение их в вашем инвестиционном портфеле отличная страховка от нестабильности рубля. При покупке облигаций обращайте внимание на эмитента (это может быть как государство, так и коммерческая компания), условия приобретения и погашения, величину и частоту выплат купонного дохода.

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

Опционы и фьючерсы вообще история не для новичков фондового рынка, но не упомянуть эти деривативы (производные ценные бумаги) нельзя, потому что валюта весьма ходовой и популярный биржевой товар. А раз так, самое время и место использовать контракты. Итак, валютные опционы это такие биржевые (и внебиржевые) контракты, согласно которым покупатель имеет право продать или купить нужную валюту по определённому курсу в установленный день. У контракта есть курс (цена исполнения), дата исполнения и сумма базисной валюты. А ещё у него есть приятная особенность: контракт не исполняется, если в день исполнения биржевой курс выгоднее курса опциона.

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

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

Плюсы

  • Еврооблигации надёжный консервативный инструмент
  • Опционы и фьючерсы отличная страховка вашей валюты от колебаний курса, это инструменты с хорошей доходностью
  • Все перечисленные инструменты ликвидный и интересный объект спекулятивных сделок

Минусы

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

Для рисковых и отчаянных


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

7. FOREX


Я писал экспертные тексты о финансах для нескольких изданий и компаний из топ-5 финансового рынка России и всегда в техническом задании на текст была просьба только не Форекс, Форекс не упоминать и т.д. С одной стороны, ТЗ всегда пишут несчастные маркетологи, которые опасаются за репутацию компании и не сильно вдаются в подробности, с другой я прекрасно понимаю причины такого распространенного пункта в заданиях. Но поскольку RUVDS никаких ТЗ не пишет и вообще позволяет авторам довольно демократично высказываться, я напишу о FOREX как есть и почему так получилось.

Форекс (от английского FOReign EXchange зарубежный обмен) это рынок международного обмена валют по свободно формирующимся (без ограничений) котировкам (предлагаемым ценам) на основе спроса на валюту и, соответственно, предложения. Участниками рынка выступают различного рода банки (центробанки, коммерческие), брокеры и дилеры, страховые и пенсионные организации и прочие (в том числе частные инвесторы/трейдеры). Это классическое, точное и исчерпывающее определение FOREX, которое можно найти в Интернете или в учебнике. Если говорить человеческим языком, это внебиржевой рынок без физического центра и торговой площадки, на котором торгуют валютой банки, компании, финансовые агенты и даже частные инвесторы.

Торговля на FOREX банальна и скучна: трейдер (то есть вы ну или любой другой человек) работает с графиками торгуемых валютных пар в том же абсолютно легальном и прекрасном MetaTrader, закрывает сделки, фиксирует прибыль или убыток. 1 лот для рынка Форекс равен 100 тысячам единиц базовой валюты. Минимальный размер лота, которым можно торговать на Форекс, составляет 0,1 лота или 10 тысяч единиц базовой валюты, однако у вашего брокера могут быть свои условия и нередко торги можно начать с 1 или 10$. Поскольку такие суммы никому не интересны, брокер предоставляет вам кредитное плечо (леверидж) и вы со своими 10$ превращаетесь в чувака с 10 000$, например (плечо 1:1000). Если сделка удачная, вы хорошо заработаете, а брокер получит комиссию, если не очень вы потеряете свой актив в 10$ (ну или сколько у вас есть).

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

Поэтому мой совет: лучше обходите FOREX стороной, но если решили поиграть с левериджем (а я подчёркиваю это не разумная инвстиция, а почти что азартная игра), выбирайте сертифицированных брокеров и дилеров, которые находятся на рынке более 10 лет. Они как минимум прошли все законодательные фильтры и научились работать в правовом поле (ну почти).

8. ПАММ-счета


На этом месте можете просто перейти к пункту 9 и помечтать, потому что сам я ПАММ-счетам не доверяю, я их не люблю и сам бы ни за что с ними не связался. Однако их стоит упомянуть хотя бы для того, чтобы вы, мой начинающий друг-инвестор, услышав слово ПАММ-счета, вспомнили бы эту статью и шли дальше. Мимо. Так вот, ПАММ-счета это счета, которые создаёт брокер, сводя вас, других инвесторов и некоего управляющего. Управляющий, опытный инвестор и аналитик (при хорошем раскладе), аккуратно совершает сделки с валютой, а вы все следуете его примеру: он продал 50% своих активов и вы, он купил юани на всё и вы (точнее не вы, а чаще всего автоматизированный торговый терминал) и т.д. За удачные ходы он получает комиссию и на этом зарабатывает. Естественно, это место для различных авантюр и нечестных ходов, хоть вроде на первый взгляд управляющему святое дело торговать бережно и выгодно.

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


Для очень состоятельных


9. Недвижимость


Я всегда достаточно позитивно относился к инвестициям в любую недвижимость, потому что простейшая квартира в брежневке дешевеет гораздо медленнее рубля и как минимум сохраняет деньги, а то и заставляет их работать. Например, вы купили небольшую хорошую квартиру за 3 млн. рублей (не в столице) и сдаёте её студенту или молодой паре за 20 000 рублей в месяц. Итого за год вы получаете 240 000 рублей за год, то есть доход по ставке 12% годовых. Неплохо. При этом квартира может сама по себе подорожать. В общем, мне эта идея всегда нравилась, несмотря на не самую высокую ликвидность и дополнительные затраты на сделках.

Так вот, если у вас есть валюта и количество этой валюты перевалило за 50-100 тыс. у.е., стоит присмотреться к зарубежной недвижимости как к форме инвестирования. Я не говорю про приобретение виллы на Лазурном берегу (а почему бы и нет, если есть?), я говорю про небольшие апартаменты или квартиры, которые можно приобрести и либо сохранять как инвестицию и использовать для личного отдыха, либо сдавать отдыхающим и получать за это дополнительные деньги. Кстати, опять же это не обязательно должны быть Франция, Испания или США гораздо интереснее такими вещами заниматься в таких странах как Италия, Болгария, Черногория, Чехия и даже Грузия (где можно найти решения значительно дешевле обозначенной суммы). В некоторых странах можно бонусом получить гражданство (если есть договор о двойном гражданстве с вашей страной проживания).

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

Плюсы

  • Право собственности неотчуждаемо в соответствии с международным правом.
  • Можно отдыхать самому и сдавать недвижимость надёжным знакомым.
  • Стоимость зарубежной недвижимости в конечном итоге стабильно растёт (хотя бывают серьёзные и длительные отскоки).
  • Можно получать дополнительный доход за счёт сдачи недвижимости в аренду но только если вы сможете подобрать жильё в популярной или востребованной географической зоне.

Минусы

  • Выход на рынок недвижимости стоит дорого и требует понимания правовых нюансов.
  • Сдавать в аренду дело рискованное, можно понести серьёзные потери из-за проблем с обслуживанием жилья.
  • Законодательство ряда стран крайне требовательно к покупателям недвижимости (включая, например, обязательность ежегодных визитов в страну-резидента, а это затраты).
  • Нет постоянного контроля за недвижимостью (система умный дом отчасти покрывает эту проблему, но всё равно владельцы признаются, что им очень тревожно).
  • Нужно потратить много времени и денег на оформление документов и придание недвижимости статуса вашей законной собственности.
  • Политические, экономические и социальные риски возможна ситуация вплоть до того, что вы на какое-то время потеряете возможность попасть на ваш объект недвижимости или же логистика сильно подорожает и затруднится (надеюсь, вы понимаете, что я не только про ковид сейчас).

Осторожно!

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

10. Прочие способы


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

Плюсы

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

Минусы

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

Осторожно!

Покупка дорогой импортной техники, новых серийных автомобилей и прочего личного транспорта, косметики, современных предметов обихода и т.д. это покупка, то есть чистые затраты средств без перспективы роста, а не инвестиция. К тому же, для таких товаров работает амортизация и вы теряете от 10 до 50% стоимости, просто выйдя из магазина или выехав из автосалона.



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

Я сейчас дописываю статью под новости о том, что евро перевалило за 90 рублей за единицу. А сколько не верящих в евро взрослых, опытных инвесторов было в начале его пути, почти 20 лет назад. Но сейчас не то время, чтобы бросаться в новые активы, лучше выбирать надёжные, проверенные инструменты, которых в принципе немало. В конце своих слов я хочу вам напомнить, что валюта это прежде всего деньги, а потом уже способ сохранить другие деньги, актив и товар. А деньги должны работать. Какой способ выбрать, решать только вам. Но что бы вы ни решили, думайте о рисках. Думать вообще круто, особенно в инвестициях.



Подробнее..

Перевод Как убрать из Git-репозитория файлы с конфиденциальной информацией

16.09.2020 16:23:32 | Автор: admin
Файлы проиндексированы, написано сообщение коммита, данные отправлены на сервер И вдруг хочется повернуть время вспять. В коммит попал файл, которого там быть не должно. Когда такое случается, приходит время обращаться к поисковику.

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

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


Удаление файлов с конфиденциальной информацией из Git-репозитория (изображение большого размера)

Минимизация ущерба


Итак, вы случайно закоммитили файл с конфиденциальной информацией. Назовём этот файл .env. Сразу после того, как это случилось, надо задать себе пару вопросов:

  • Отправлен ли коммит в удалённый репозиторий?
  • Является ли удалённый репозиторий общедоступным?

Коммит пока не отправлен в удалённый репозиторий


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

git reset HEAD^ --soft

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

Если же вы хотите сохранить коммит и вам нужно просто удалить из него определённые файлы, тогда поступите так:

git rm .env --cachedgit commit --amend

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

git rebase -i HEAD~{на сколько коммитов нужно вернуться?}

Это позволит исправить неправильный коммит и поможет не потерять изменения, внесённые в проект остальными коммитами.

Коммит отправлен в удалённый репозиторий


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

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

Если вы отправили в репозиторий, после проблемного коммита, и другие коммиты, это не помешает вам убрать файлы с конфиденциальными данными из истории Git, воспользовавшись командой git filter-branch или инструментом BFG Repo-Cleaner.

Вот пример использования git filter-branch:

git filter-branch --force --index-filter "git rm --cached --ignore-unmatch .env" --prune-empty --tag-name-filter cat -- --all

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

  • Вы меняете историю Git. Если на текущее состояние репозитория полагаются другие люди, если от этого состояния зависят какие-то ветки того же репозитория, его форки, открытые PR, то это нарушит их работу. В подобных случаях относитесь к репозиторию как к общедоступному и постарайтесь не вносить изменения в его историю.
  • Вам нужно будет очистить кеш. Вам понадобится обратиться в службу поддержки платформы, на которой хранится ваш репозиторий, и попросить очистить его кеш. Несмотря на то, что вы исправили проблемный коммит или переписали историю репозитория, старый коммит, содержащий конфиденциальные данные, останется в кеше. Для того чтобы к нему обратиться, нужно будет знать его ID, но к нему можно будет получить доступ до тех пор, пока кеш не очистят.

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


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

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

  • Деактивируйте все ключи или пароли. Это надо сделать в первую очередь. После того, как вы деактивируете ключи, конфиденциальные сведения, ушедшие в общий доступ, оказываются бесполезными.
  • Настройте файл .gitignore. Сделайте в .gitignore записи о файлах с конфиденциальной информацией для того чтобы Git не отслеживал бы состояние этих файлов.
  • Подготовьте коммит, в котором нет файлов с конфиденциальной информацией.
  • Отправьте изменения в репозиторий, снабдите коммит пояснениями о возникшей ситуации. Не пытайтесь скрыть ошибку. Все программисты, работающие над проектом, включая вас, по достоинству оценят наличие в репозитории коммита с разъяснениями ситуации и с описанием того, что именно было исправлено с помощью данного коммита.

Рекомендации по хранению конфиденциальных файлов в проектах, в которых для контроля версий применяется Git


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

Храните секретные данные в файле .env (или в другом подобном файле)


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

Ещё одно преимущество такого подхода заключается в том, что так у вас будет доступ ко всем ключам через глобальную переменную process.

Используйте, если это возможно, ключи API


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

Храните ключи API, пользуясь средствами вашего инструмента для сборки проектов


Ключи API обычно нужны при сборке приложений. Инструменты для сборки проектов, вроде Netlify, позволяют держать ключи в защищённых хранилищах. Такие ключи автоматически внедряются в приложение с использованием глобальной переменной process.


Управление переменными окружения

Добавьте запись о файле .env в файл .gitignore


Сделайте так, чтобы Git не отслеживал бы файлы, содержащие конфиденциальную информацию.

Подготовьте шаблонный файл .env.template


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

Не меняйте историю Git в удалённых репозиториях


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

Итоги


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

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



Подробнее..

Заметки Дата Сайентиста с чем начать и нужно ли оно?

17.09.2020 14:13:09 | Автор: admin

TL;DR это пост для вопросов/ответов про Data Science и о том, как войти в профессию и развиваться в ней. В статьей я разберу основные принципы и FAQ и готов отвечать на ваши конкретные вопросы пишите в комментариях (или в личке), я постараюсь на все ответить в течение нескольких дней.
С появлением цикла заметок дата сатаниста пришло немало сообщений и комментариев с вопросами о том, как начать и куда копать и сегодня мы разберем основные скиллы и вопросы возникшие после публикаций.

Все указанное тут не претендует ни какую истину в последней инстанции и является субъективным мнением автора. Мы разберем основные вещи, которые кажутся самыми важными в процессе.

Зачем именно это нужно


Для того, чтобы цель была достижима лучше, чтобы она хоть как-то конкретно выглядела вы хотите стать DS или Research Scientist в Facebook/Apple/Amazon/Netflix/Google смотрите требования, языки и необходимые навыки прям конкретно под какую позицию. Какой процесс найма? Как проходить обычный день в такой роли? Как выглядит усредненный профиль человека, который там работает?

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

Будет или это еще актуально


К тому моменту, как вы дорастете до позиции.

Представьте, что до вашей позиции вам нужно получить PhD, поработать 2-3 года в индустрии и вообще остричься, медитируя в монастыре не будет ли с Data Science такой же ситуации как когда-то с экономистами и юристами? Не изменится ли все до неузнаваемости в той области, которой вы хотите заниматься.

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

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

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

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

Разбивка навыков


Это условные категории навыков, который мне кажутся ключевыми для полноценной и эффективной работы в DS. Отдельно выделю английский учите, чем бы вы не занимались в CS. Далее будут ключевые категории.

Программирование/Скриптинг


С какими языками обязательно надо познакомиться? Python? Java? Shell scripting? Lua? Sql? C++?

Что именно нужно уметь и зачем в плане программирования тут спектр позиций очень разнится.

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

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

Например, для питона люди уже даже составляют карту изучения языка.

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

Понимание бизнес процессов


Без него никуда: вам нужно понимать зачем вы нужны в данном процессе, что вы делаете и зачем. Часто именно это может сэкономить вам кучу времени, максимизировать свою пользу и не тратить время и ресурсы на фигню.

Обычно, я задаюсь следующими вопросами:

  • Что именно я делаю в компании?
  • Зачем?
  • Кто и как это будет использовать?
  • Какие у меня есть опции?
  • В каких границах находятся параметры?

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

Математика


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

  • Линейная алгебра огромное количество ресурсов легко гуглится, ищите, что вам больше всего подходит;
  • Математический анализ (хотя бы в объеме первых двух семестров);
  • Теория вероятностей она повсюду в машинном обучении;
  • Комбинаторика она фактически комплементарна к теорверу;
  • Теория графов хотя бы БАЗОВО;
  • Алгоритмы хотя бы объеме первых двух семестров (см. рекомендации Кормена в его книжке);
  • Матлогика хотя бы базово.

Практический анализ и визуализация данных


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

Exploratory data analysis должен стать просто чем-то естественным, как и все прочие трансформации данных и умение накидать простой пайплайн из unix тузлов (см. предыдущие статьи) или написать читаемый и понятный ноутбук.

Отдельно упомяну визуализацию: лучше один раз увидеть, чем сто раз услышать.

Показать менеджеру график в сто раз проще и понятнее, чем набор цифр, поэтому matplotlib, seaborn и ggplot2 ваши друзья.

Софт скиллы


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

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

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

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

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

Обучение


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

  • Онлайн курсы: coursera, udacity, Edx, etc;
  • Новые школы: онлайн и офлайн SkillFactory, ШАД, MADE;
  • Классические школы: магистерские программы университетов и курсы повышения квалификации;
  • Проекты можно просто выбрать интересные вам задачи и пилить, выкладывая на github;
  • Стажировки тут сложно что-то подсказать, надо искать, что имеется и находить подходящий варианты.

А надо ли оно?


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

  • Должно быть интересно;
  • Приносить внутреннее удовольствие (= хотя бы не причинять страданий);
  • Быть вашим.

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

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

Быть вашим это то самое ощущение, что вы примерно этим и хотели заниматься. У меня есть небольшая история. Я с самого детства увлекался рок-музыкой (и металлом ЛОСОСЬ!) и как очень многие захотел научиться играть и вот это вот все. Выяснилось, что у меня нет слуха и голоса меня это совершенно не смущало (а надо сказать многих исполнителей это и прямо на сцене не смущает), и вот еще школьником у меня появилась гитара и стало понятно, что мне не очень нравится часами сидеть и играть на ней. Шло тяжко, мне все время казалось, что выходит какая-то фигня я совершенно не получал от этого удовольствия и только чувствовал себя паршиво, глупо и совершенно неспособным. Я буквально из под палки себя заставлял садиться за занятия и в целом это было не в коня корм.

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

И в какой-то момент я понял, что игра на гитаре это не мое и реально-то мне нравится слушать, а не играть. А глаза-то горели, когда я писал игры и код (слушая в этот момент всякие разновидности металла) и вот это-то мне тогда и нравилось, и этим мне стоило заниматься.

А еще есть вопросы?


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



Подробнее..

Google не узнает, что вы делали прошлым летом (ну почти)

18.09.2020 14:13:41 | Автор: admin

Google (или его родительский холдинг Alphabet) на данный владеет самым популярным одноименным поисковым сервисом, самым популярным видеохостингом YouTube, самым популярным сервисом электронной почты с Gmail, самой популярной мобильной операционной системой Android и целым рядом популярных облачных приложений для работы с документами Google Docs. По крайней мере восемь продуктов корпорации имеют более миллиарда пользователей. Бородатая шутка из середины нулевых о том, что скоро мы все будем ездить на работу в Гугле на Гугле, чтобы заработать немного Гугла, сегодня оказалась близка к реальности как никогда.

Материнская компания Google Alphabet (GOOGL, GOOG) в январе 2020 года превысила рыночную оценку в $1 трлн., а за 12 месяцев 2019 года ее акции выросли на 25%. За весь 2019 год технический гигант получил доход в $161,857 млрд. Что же является источником таких баснословных доходов? Таргетированная реклама!

В начале февраля 2020, публикуя свои финансовые результаты за 4 квартал и весь 2019 год, Alphabet впервые раскрыл более подробную информацию о двух своих основных сегментах прибыли: Google и Другие статьи. Сегмент рекламы Google advertising обеспечил более 83% всех доходов Alphabet, по итогам 2019 года сумма составила $134,811 млрд., рост составил 16% по сравнению с значением 2018 года. Основная часть доходов (а именно $98,115 млрд.) от рекламы была получена за счет ее размещения в поисковых сервисах Google.

Цена использования бесплатных приложений


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

Google собирает личные данные, когда пользователи дают очевидное согласие (авторизуются в любом из сервисов компании YouTube, Gmail) и когда пользователи не дают очевидное согласие и чаще всего даже не подозревают, что компания в тот или иной момент собирает личные данные.

Так называемые пассивные методы сбора данных (без явного согласия пользователя) действуют, например, на платформах Android и Chrome, в приложениях Поиск, YouTube, Карты), инструментах издателя Google Analytics, AdSense и инструментах рекламодателя AdMob, AdWords.

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

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

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

Прецеденты на на государственном уровне


21 января 2019 года Национальная комиссия по делам информационных технологий и правам человека (CNIL) Франции оштрафовала Google на 50 млн евро.

Штраф стал результатом расследования, начатого в мае 2018, когда в CNIL поступили коллективные жалобы от правозащитных ассоциаций None Of Your Business (NOYB) и La Quadrature du Net (LQDN), представляющих интересы более 10 000 человек.

В этих двух жалобах ассоциации обвиняли Google в отсутствии надлежащей правовой базы для обработки персональных данных пользователей, в том числе для персонализации рекламы.
В ходе расследования Нацкомиссия Франции установила два нарушения европейского Регламента о защите данных (GDPR).

В Сентябре 2019 года YouTube обязали выплатить $170 млн за сбор персональной информации детей без согласия родителей и использование ее для таргетированной рекламы. Штраф стал рекордным с начала существования закона о конфиденциальности детей в США.

Хватит это терпеть!


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

  1. Вы испытываете дискомфорт от самого факта, что каждое ваше действие логируется, анализируется и подвергается дата-майнингу.
  2. Вы хотели бы избежать передачи собранной о Вас информации по запросу от государственных компетентных органов и силовых ведомств.
  3. Вы боитесь, что в случае взлома вашего аккаунта или кражи\утери девайса, злоумышленники получат доступ сразу ко всей хронологии ваших перемещений, действий и переписок.
  4. Вам не нравится, что средства мониторинга Google вызывают повышенный расход энергии и трафика вашим мобильным устройством, а его программное обеспечение обновляется без вашего ведома и контроля.
  5. Ваш смартфон спустя некоторое время после покупки стал страшно тормозить, хотя вы на него даже не успели ничего толком поставить.

Согласны хотя бы с одним из пунктов? Тогда пришла пора принять меры, чтобы не дать Гуглу узнать, что вы делали этим летом!

Уходим в отказ


Для разминки откажемся от услуг Google на вашем настольном компьютере. В этом случае рецепт счастья довольно прост.

Локальный аккаунт Windows, установка Vivaldi или Mozilla Firefox браузером по умолчанию с активацией всех функций защиты приватности, установка и настройка браузерных расширений AdBlock и NoScript, установка DuckDuckGo поисковиком по умолчанию, выбор альтернативного почтового сервиса. Важно понимать, что эти меры не сделают вас неуязвимыми для слежки, но довольно радикально уменьшат ее размах

Теперь возьмемся за ваш смартфон на Android. Первым делом устанавливаем независимый маркетплейс открытого программного обеспечения для Android F-droid, синхронизатор контактов DAVx5, меняем браузер по умолчанию на более приватный Vivaldi или Mozilla Firefox, ставим альтернативный картографический сервис OsmAnd и почтовое приложение K9 и можно жить? Не тут-то было

Андроид не лыком шит, а сервисами Гугла


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

Вот что говорит он них сам поисковый гигант: Сервисы Google для мобильных устройств (GMS) это набор приложений и API, которые реализуют дополнительные возможности на устройствах Android. Приложения не требуют специальных настроек и взаимодействуют друг с другом, обеспечивая непревзойденное удобство для пользователей.

Звучит как очень важное и полезное ПО, если бы не два НО полностью отключить или удалить GMS просто так невозможно, и именно через механизмы GMS осуществляется львиная доля слежки за пользователем смартфона.

Что представляют представляют собой Google сервисы?


Google Mobile Services (GMS) это проприетарные или частично проприетарные приложения от Google, такие как Google Play Store, Google Chrome, Youtube и другие, которые часто предустановлены на устройствах Android. GMS не является частью свободного Android Open Source Project (AOSP), что означает, что производителю Android необходимо получить лицензию от Google, чтобы законно предустановить GMS на устройстве Android. И ставят их почти все производители.

Одним из основных компонентов GMS являются Google Play Services это проприетарный фоновый сервис и пакет API для устройств Android от Google. Сервисы Google Play автоматически и незаметно обновляются через Google Play на устройствах с этим приложением, установленным на Android 4.1 или новее. Это означает, что Google может доставлять обновления без необходимости обновлять прошивку Android производителям, что позволяет избежать фрагментации платформы, из-за которой ранее она получила печальную известность. Именно на Google Play Services завязаны ключевые функции взаимодействия с облаком Google и одновременно сбора данных о пользователе.

Почему почему пользователю смартфона следует отказаться от GMS\Play сервисов?

  • Постоянно передают данные в Google.
  • Обновляются самостоятельно вне вашего ведома и контроля.
  • Со временем новые версии GMS начинают потреблять все больше ресурсов.
  • Работа GMS расходует дополнительную энергию батареи и мобильный трафик.
  • Занимают значительный объем оперативной и постоянной памяти на основном разделе.

Путем выполнения специальных манипуляций GMS и play services все-таки можно удалить, и использовать устройство уже без них, однако из-за намеренной глубокой интеграции сервисов в работу смартфона вас могут поджидать большие сложности с запуском и использованием многих популярных приложений.
Последствия из-за отказа от GMS и play services, которые не решить простой установкой альтернативных приложений могут быть такими:

  • Проблемы с определением местоположения в картографических приложениях.
  • Проблемы с запуском фирменных приложений Google и авторизации в них.
  • Отсутствие доставки пуш-уведомлений на смартфон.
  • Отсутствие облачной синхронизация календаря и телефонной книги.

Избавляемся от Google на смартфоне правильно


Так как же удалить гугл со смартфона и не потерять большую часть функциональности? Еще несколько лет назад это была практически неразрешимая задача и пользователям приходилось просто мирится с серьезными неудобствами и ограничениями. Пока однажды не появился проект microG Services Core, который позволяет заменить собой функции проприетарных Google Play Services.

MicroG свободная альтернативная реализация (по сути протез) Google Play Services Framework с открытым исходным кодом, предоставляющая все основные функции сервисов Google и сохраняющая конфиденциальность.

Возможности, которые предоставляет MicroG:

  • Низкий расход батареи, малое потребление оперативной памяти и ресурсов процессора.
  • Малый размер занимаемого места на системном разделе по сравнению с сервисами Google (5-10 mb против 400-500 mb).
  • Авторизация на серверах Google и широкая поддержка приложений.
  • Онлайн и оффлайн сервисы навигации полноценно функционируют.
  • Отсутствие сомнительных компонентов.
  • Работает как на реальных устройствах, так и в эмуляторах Android.
  • Открытый исходный код (лицензия Apache 2.0).

Но путь к замене Google Play Services на microG для заводской прошивки довольно тернист и включает в себя приличное количество шагов.

Универсальная инструкция, актуальная для смартфонов на базе Android 9\10


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

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

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

  1. Потребуется установить кастомное recovery.

    Recovery это образ аварийной среды восстановления, который обычно присутствует на смартфонах, однако заводские рекавери обычно сильно ограничены в функциях, поэтому все ставят себе доработанные кастомные образы.Лучше всего подойдет наиболее популярное кастомное рекавери TRWP. Способы установки зависят от конкретной модели телефона, их можно посмотреть на официальном сайте проекта twrp.me.

  2. Следующий шаг установка утилиты Magisk

    Это опенсорсная утилита, которая патчит boot образ системы, позволяет получить root-права (MagiskSU), устанавливать различные системные приложения и моды в режиме systemless, т. е. без модификации основного системного образа Android. Скачиваем zip-архива Magisk с официального сайта в корневую папку смартфона.



    Перезагружаемся в рекавери TRWP и выполняем прошивку zip-архива. Загружаем телефон снова, скачиваем и устанавливаем приложение Magisk Manager для управления Magisk и его модулями.

  3. Устанавливаем фреймворк Xposed. Это фреймворк, который позволяет пользователям легко применять надстройки (называемые модулями) к существующей системе Android. Вместо того, чтобы прошивать новую прошивку для получения определенной функции, вы можете использовать модули Xposed для добавления отдельных функций. В нашем случае он необходим для активации модуля подделки подписи.

    Устанавливаем модуль Magisk manager for recovery mode (mm) из репозитория Magisk. Он нужен для отключения Xposed в случае цикличной перезагрузки устройства.

    Устанавливаем архивы EdXposed-SandHook-v0.4.6.2.4529.-release.zip и magisk-riru-v21.3.zip как модули Magisk. Перезагрузите смартфон!

    Устанавливаем приложение-менеджер EdXposedManager-4.5.7-45700-org.apk

    Проверяем статус Xposed Framework в Xposed Installer.
  4. Из репозитория Xposed устанавливаем модуль FakeGapps. Он необходим для подделки подписи, чтобы MicroG смогли полноценно притворятся Play services. Перезагрузите смартфон!
  5. Установка пакета NanoLX NanoDroid то, ради чего выполнялись все предыдущие действия. NanoDroid это автоматическая пакетная система удаления Google Play Services и установки и настройки компонентов microG и дистрибутив популярных опенсорсных программ.

    Скачайте архив NanoDroid-22.9.20200910.zip с официального сайта и установите этот архив через Magisk Manager или TRWP. Обязательно перед его установкой перезагрузите смартфон и создайте файл конфигурации .nanodroid-setup по инструкции. Незнакомые параметры не меняем. Также в этом файле можно выбрать, какое дополнительное свободное программное обеспечение нужно предустановить.

    Нас интересуют эти параметры (другие при желании тоже)
    nanodroid_microg=* вариант установки microG
    0 = не устанавливать
    1 = установить GmsCore, GsfProxy, DroidGuard Helper и бекенд Nominatim Geocoder Backend (оптимальный вариант)
    2 = установить GmsCore и бекенд Nominatim Geocoder Backend (не будут работать push-сообщения)
    nanodroid_gsync=* Файлы синхронизации
    0 не устанавливать
    1 устанавливать (оптимальный вариант)
    nanodroid_overlay=* Удаление Google Play services и части предустановленных приложений или скрытие средствами Magisk, при наличии Magisk (Pseudo-debloat)
    0 нет
    1 да (оптимальный вариант)
    nanodroid_play=21 Тип магазина приложений
    21 = установить Aurora Store (вместе с аддоном Aurora Services) и Fake Store

    После установки перезагружаем смартфон!

Можно начинать пользоваться!


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

  • Aurora Store. альтернативный клиент для Play Store, выполняет установку и обновление бесплатных приложений.
  • Yalp Store, это практически то же самое, но без красивого интерфейса и с еще более скромными системными требованиями
  • F-Droid каталог открытого ПО для Android. Можно использовать как официальный репозиторий, так и сторонние.

P.S. Не любите длинные и сложные инструкции?
Можно установить комбинированную прошивку LineageOS for MicroG и получить полнофункциональный Андроид-смартфон без гугл сервисов сразу из коробки. Самый простой и удобный способ из множества доступных, настоятельно рекомендуется, если ваше устройство есть в списке поддерживаемых.



Подробнее..

Перевод Выбираем лучший бэкенд-фреймворк 2021 года

18.09.2020 16:04:09 | Автор: admin
Недавно мы опубликовали статью, автор которой размышлял о том, какой язык программирования, JavaScript, Python или Go, лучше всего подойдёт для бэкенд-разработки в 2021 году. Сегодня мы представляем вашему вниманию перевод ещё одного материала того же автора. Здесь он пытается найти ответ на вопрос о том, на какой фреймворк для разработки серверных частей приложений стоит обратить внимание тем, кто хочет во всеоружии встретить 2021 год.



О роли фреймворков в IT-индустрии


Я, проанализировав результаты опроса разработчиков, проведённого в 2020 году Stack Overflow, понял, что использование фреймворков играет огромную роль в IT-индустрии. А именно, речь идёт об ответах на вопрос о том, что разработчики считают самым важным при поиске работы.


Факторы, влияющие на выбор места работы

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

Разработчик обычно знаком хотя бы с одним фреймворком. Здесь я собираюсь рассказать о трёх фреймворках о Node.js/Express, Django и Spring Boot. Полагаю, что тот, кто, готовясь к 2021 году, решит сделать своим основным инструментом один из них, в любом случае, не прогадает. Но у каждого из них есть свои особенности, которые мне и хотелось бы здесь обсудить.

Результаты исследований и другие данные


Данные с GitHut


Ресурс GitHut позволяет узнать различные сведения о репозиториях. В частности, речь идёт о количестве активных репозиториев, об общем количестве PR, и о разных показателях, рассчитываемых по состоянию на один репозиторий: количество PR и форков, число открытых задач, количество новых подписчиков.


Популярность языков программирования на GitHub

Исследование Stack Overflow


Если взглянуть на результаты исследования Stack Overflow, то окажется, что Express находится на первом месте среди бэкенд-фреймворков, которые любят разработчики. Два других интересующих нас фреймворка, Spring и Django, следуют за Express с небольшим отрывом. В результате оказывается, что проект, основанный на самом перспективном скриптовом языке, на JavaScript, лидирует, а за ним идёт проект, в котором используется один из языков, обладающих самыми широкими возможностями, то есть Python.


Популярность веб-фреймворков

GitHub-репозитории


Некоторые люди не любят перемен, но изменения необходимо принимать, если альтернативой является катастрофа.
Илон Маск


Фреймворк Express создан на базе платформы Node.js, поэтому тут мы будем сравнивать репозитории Node.js, Spring Boot и Django


Репозиторий node


Репозиторий spring-boot


Репозиторий django

Как видно, больше всего звёзд у репозитория Node.js. Но разница между звёздами проектов не так сильна, как различие в количестве их форков. У Spring Boot и Django имеется гораздо больше форков, чем у Node.js.

Теперь поговорим о том, в каких ситуациях имеет смысл выбирать тот или иной из рассматриваемых нами фреймворков.

Node.js/Express


Node.js представляет собой серверную платформу, которая является частью стека технологий, охватывающих все нужды веб-разработки, и основанных на JavaScript. В Node.js используется JavaScript-движок V8, тот же самый, что применяется в браузере Chrome и в других браузерах, основанных на Chromium. В результате оказывается, что благодаря использованию Node.js код, предназначенный для выполнения на сервере, можно писать на JavaScript. На базе платформы Node.js создано множество фреймворков, включая такие популярные, как Express.

Сильные стороны Node.js


  • Появление Node.js сделало возможным фуллстек-разработку веб-проектов на JavaScript. В результате в распоряжении разработчиков серверных частей приложений оказались и сильные возможности JavaScript, и наработки экосистемы JS, библиотеки, которыми стало реально воспользоваться в серверном окружении.
  • JavaScript-код, аналогичный по функционалу, например, коду, написанному на C, оказывается компактнее. Производительность JavaScript-кода при этом достаточно высока для применения его в проектах, в которых важна скорость работы кода.
  • Код клиентских и серверных частей проектов легче поддерживать в согласованном состоянии, так как и там и там используется один и тот же язык.
  • Один и тот же код можно совместно использовать и на клиенте, и на сервере.
  • Благодаря существованию модулей Node.js, которые, в сущности, представляют собой особым образом оформленные фрагменты кода, разработчики могут с удобством использовать в своих проектах чужой код, а так же собственные наработки.
  • Платформа Node.js, и, соответственно, основанные на ней фреймворки, отличаются нетребовательностью к ресурсам и масштабируемостью. Именно поэтому Node.js это платформа, к которой часто прибегают те, кто пользуется микросервисными архитектурами.
  • Эта платформа хорошо подходит для разработки микросервисов ещё и из-за существования системы модулей Node.js, которые можно представить себе в виде строительных блоков серверных приложений.
  • В Node.js JavaScript код компилируется в машинный код, что позволяет получить гораздо более высокую производительность, чем при интерпретации кода. Сообщество JavaScript-разработчиков видит постоянное улучшение производительности Node.js за счёт того, что Google постоянно работает над совершенствованием V8.
  • Благодаря тому, что в Node.js имеется система ввода-вывода, не блокирующая главный поток, эта платформа демонстрирует высокую производительность. Достойная скорость обработки запросов достигается благодаря использованию JavaScript-механизмов конкурентного однопоточного выполнения кода.
  • Node.js это опенсорсный проект, вокруг которого собралось огромное сообщество разработчиков. Это значит, что тот, кто столкнётся с какой-то проблемой, сможет достаточно быстро найти её решение.
  • Node.js, в ближайшем будущем, может стать платформой, которую будут использовать для проведения тяжёлых вычислений, наподобие тех, которые применяются для решения задач машинного обучения.

Компании, которые используют Node.js


  • Paypal
  • Netflix
  • LinkedIn
  • Uber
  • eBay
  • Yahoo

Если учесть сильные стороны Node.js и то, в каких компаниях используется эта платформа, становятся понятными причины её огромной популярности. Зарплата Node.js-разработчиков в США варьируется в пределах $40,000-$130,000 в год. В результате можно сказать, что если вы чувствуете, что Node.js и фреймворки, основанные на этой платформе, вам интересны, вы вполне можете выбрать именно их в качестве базы для своих разработок 2021 года.

Spring Boot


Проект Spring Boot это фреймворк для разработки бэкенд-приложений, основанный на Java, который, как и Node.js, используется для разработки микросервисов. Этот фреймворк упрощает создание приложений, основанных на Spring, его можно представить себе в виде инструмента для создания самостоятельных Spring-приложений. Если вы планируете в 2021 году перейти на Spring, то вам, определённо, стоит знать о том, чем вам в этом деле сможет помочь Spring Boot.

Сильные стороны Spring Boot


  • Spring Boot позволяет с минимальными усилиями создавать самостоятельные Spring-приложения, облегчает процесс их конфигурирования, упрощает работу над ними. Подобные приложения легко запускаются с помощью команды java -jar.
  • Если в процессе создания Spring Boot-приложения произошла ошибка, встроенный анализатор ошибок поможет справиться с проблемой.
  • Spring Boot поддерживает встроенные серверы, вроде Tomcat и Jetty. Это значит, что тем, кто пользуется Spring Boot, не нужно развёртывать .war-файлы на внешних серверах.
  • Использование Spring Boot позволяет облегчить конфигурирование Maven за счёт наличия в системе начальных вариантов файла pom.xml.
  • В возможности фреймворка входит автоматическое конфигурирование Spring.
  • Spring Boot хорошо интегрируется с другими фреймворками.
  • Фреймворк предоставляет разработчику конфигурации, готовые для продакшн-использования. Сюда входят, например, метрики состояния проекта и внешние конфигурации.
  • При использовании Spring Boot нет нужды в применении XML-конфигураций или средств для генерирования кода.
  • Применение Spring Boot облегчает труд разработчиков за счёт применения принципа проектирования ПО, известного как Convention over Configuration.

Компании, которые используют Spring


  • Platform
  • Intuit
  • MIT
  • Zillow
  • TransferWise

Честно говоря, я не фанат Java. И я не будут использовать Spring Boot для серверной разработки в 2021 году. Но, если верить статистике, существует много программистов, применяющих этот фреймворк. Если говорить о зарплатах соответствующих специалистов, то это что-то около $50,000-$104,000 в год. Это немного меньше, чем зарплаты Node.js-разработчиков.

Django


Django это опенсорсный бэкенд-фреймворк, написанный на Python. Как известно, Python это один из таких языков, которые пользуются наибольшей любовью разработчиков. И это одна из основных причин того, что Django является одним из самых популярных серверных фреймворков. Но у того, чтобы выбрать Django в качестве своего фреймворка 2021 года, есть и другие причины.

Сильные стороны Django


  • Django позволяет без особых сложностей создавать динамические веб-приложения с использованием Python. Данный фреймворк написан на Python. В этом заключается одно из главных достоинств Django.
  • Фреймворк поддерживает паттерн проектирования MVC. Это помогает разработчикам в разделении пользовательского интерфейса и бизнес-логики Django-приложений.
  • Это быстрый фреймворк, не перегруженный ненужными возможностями. Я имеют в виду то, что использование Django позволяет быстро выйти на работоспособный проект.
  • Django не относится к минималистичным фреймворкам, широко используемым для разработки микросервисов. Он отличается мощностью, универсальностью и определённым своеобразием.
  • Создатели этого фреймворка серьёзно относятся к безопасности. Поэтому они дают разработчикам, использующим Django, соответствующие инструменты. Я уверен, что все вы знаете о том, как много проблем существует в наши дни в сфере кибербезопасности. Поэтому чрезвычайно важными являются вопросы защиты веб-проектов. Django поддерживает систему аутентификации пользователей, содержит инструменты для защиты от различных атак. Среди них средства защиты от SQL-инъекций, от межсайтового скриптинга, от межсайтовой подделки запросов, от кликджекинга.
  • Django-проекты отличаются компактностью кода.
  • Разработчики, использующие Django, могут моделировать базовые классы. Это значит, что в их распоряжении всегда имеется ORM.
  • Django это кросс-платформенный проект. Он отлично работает на различных операционных системах. Кроме того, он поддерживает взаимодействие с различными базами данных.
  • Это фреймворк, приложения, созданные с использованием которого, хорошо поддаются масштабированию. Поэтому тот, кто выбирает Django, может быть уверенным в том, что сможет эффективно развивать свой проект по мере его роста.
  • Вокруг Django сформировалось активное сообщество. Поэтому тот, кто столкнулся с какой-то проблемой, сможет без особых сложностей её решить.

Компании, которые используют Django


  • Mozilla
  • NASA
  • Pinterest
  • Bitbucket
  • Instagram

Так как Django основан на Python, о производительности этого фреймворка и о его поддержке можно не беспокоиться. Кроме того, если взглянуть на список компаний, использующих Django, можно сделать вывод о том, что это фреймворк, достойный внимания и в этом, и в будущем году. Если проанализировать зарплаты Django-разработчиков, то окажется, что это что-то между $90,000-$120,000 в год. В результате оказывается, что спрос на Django-специалистов достаточно высок.

Итоги


Вышеприведённые факты позволяют сделать вывод о том, что платформа Node.js, в лице фреймворка Express, и Django показывают себя очень хорошо. Но, в то же время, Spring Boot тоже представляет собой достаточно интересное явление. Полагаю, что самым интересной платформой для разработки серверных частей приложений в 2021 году будет Node.js. Хотя и Django это отличный, развитый фреймворк, который вполне может стать чьим-то выбором в будущем году.

Каким фреймворком для разработки серверных частей веб-проектов вы планируете пользоваться в 2021 году?



Подробнее..

Путь от джуна до исполнительного директора в Сбербанке. Интервью с Алексеем Левановым

19.09.2020 12:19:21 | Автор: admin

7 сентября мы поговорили в прямом эфире с Алексеем Левановым, исполнительным директором в Сбербанке. Леша пришел в Сбербанк в 2014 году на позицию Junior-разработчика. Сейчас он исполнительный директор: продакт и тимлид платформенной команды Сбербанк Инвестор и занимается МП Сбербанк Инвестор и Школами Разработки Сбербанка. Леша рассказывал на примере своего пути: как расти и развиваться в крупной компании, каких ошибок стоит избегать и как инициировать изменения. Поговорили про вызовы и возможности, про work-life balance, про то, как не выгореть и вернуться, если все же выгорел. Делимся с вами расшифровкой эфира.



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

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

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

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

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

Сделаем ремарку. Все говорят про хард/софт скиллы, и на этот счет есть много разных мнений. Я считаю так: если вы в начале карьерного пути (только начинается ваша история как разработчика ПО или вообще как IT-специалиста) делайте упор на хард скиллы. Вышеописанные принципы будут работать, если вы хороший специалист. Вы можете быть хорошим человеком, обладать эмпатией и развитым умом, даже стараться доводить дела до конца и быть стрессоустойчивым; но, если вы не делаете руками то, что должны делать тоже грош вам цена, как специалисту. В дальнейшем, с развитием, чем прокачаннее вы становитесь, тем большую роль начинают играть софт скиллы это правда. На определенном этапе они могут стать такими же важным, или важнее, чем хард скиллы. Но, если мы говорим о начале построении карьеры делайте упор на хард скиллы, без них никуда.

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

Вы исполнительный директор или product-owner (PO)?


Это разные вещи: одно это должность, а второе роль. По должности я исполнительный директор, а по роли product-owner и тимлид. То есть, одна вещь условно записана в трудовой, а вторая то, что я делаю.

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


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

Как много времени сейчас вы занимаетесь именно разработкой?


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

Как взять ответственность product-owner и получить должность?


Честно говоря, я не очень понимаю, что значит взять ответственность PO. А чтобы получить должность, надо работать. Трудишься, много трудишься, решаешь задачи, если успешно решаешь их ты растешь. Это базовая история, она везде плюс-минус одинакова. На самом деле, PO это просто направление развития, которое вам может быть интересно. Мне была интересна не просто хардкорная разработка, а также и влияние на продукт, возможность им управлять поэтому я развивался в сторону PO. То есть, нужно желание, работа и три основы, о которых мы говорили из этого складывается история получения должности.

Итак, я рассказал о том, на чем стоит фокусироваться (напомню: на хард скиллах, если вы новичок, далее в процессе прокачивать софт скиллы), и о трех основных качествах, которые надо в себе воспитать принятие изменений, драйв изменений и доведение дел до конца. Перейдем к более конкретным историям.

Насчет изменений. Я начал заниматься разработкой в далеком 2011 году, и меня помотало по разным темам. Сначала я писал под Android. Пришел я в разработку так: мы с другом увидели, что на Хабре периодически появляются статьи о том, как очередной человек разработал клон тетриса и заработал миллиарды; собственно, чтобы заманить студента, ничего другого и не надо. Я читал их и думал я в деле. Макбук появился у друга, поэтому вначале я писал на Android; прошло несколько фрилансов и несколько мест в других компаниях, и в 2014 году я пришел в Сбер. В этот момент у меня уже были приложения в AppStore, некоторые достаточно успешные, о них написали на Iphones.ru, AppleInsider; я заработал некоторое количество денег и думал, что это вершина мастерства и карьеры, а другие разработчики мне не нужны. Конечно, когда я пришел в команду разработки, я оказался в ней самым слабым, хотя потребовалась пара дней, чтобы это осознать.
Это было замечательное время. Все общение с бизнесом и другими специалистами шло через нашего project-менеджера, но среда была замечательной для того, чтобы расти. Когда ты один пишешь код, ты в какой-то момент решаешь, что все уже отлично; а потом ты узнаешь, что есть правильные подходы к разработке, паттерны, о которых ты даже и не думал. В среде крутых профессионалов растешь гораздо быстрее.

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

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

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

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

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

Бывает такая история, что вы хотели бы остаться в этой же команде. Вам нравится продукт, команда, у вас замечательный product-менеджер все хорошо, но только не хочется больше писать код распознавания номеров. В кросс-функциональных командах здорово то, что есть возможность переключиться и стать тем самым T-shaped-специалистом, о которых много говорят. Для вас это хорошо тем, что вы учитесь новому. Вы продолжаете развиваться в своей области хотя и чуть медленнее, изучаете смежные области и повышаете свою ценность как специалиста. Для работодателя тем, что уменьшается buzz-фактор.

T-shaped-специалист это эволюция I-shaped-специалиста, обладающего глубокими познаниями в одной определенной области. Допустим, человек учился в школе и решил стать программистом; нравится ему писать на C# или в Unity, допустим. Он не пошел в университет, но он стал экспертом в своей области, и делает игры. Он I-shaped-специалист; на работу его, скорее всего, уже возьмут. Если этот же человек изучит интеграцию с бэкендом, будет способен подключаться к различным вопросам хотя бы аналитически, будет смыслить в тестировании (наверно, в базовых основах авто-тестирования и написания тест-кейсов), то он будет T-shaped-специалистом. То есть, это человек, который может помочь в смежных компетенциях внутри кросс-функциональной команды.

Buzz-фактор это выдуманная метрика, которая показывает количество людей, которых можно куда-то далеко отправить на автобусе, но команда при этом продолжит хоть как-то работать. У идеальной T-shaped-команды он равен N-1 (N размер команды): даже если из такой команды останется один человек, он сможет продвигать работу вперед, пусть и очень медленно. Конечно, это предельный пример, такого в жизни почти не бывает; тем не менее, создание такой команды это хорошая практика.

Став T-shaped-специалистом, вы остаетесь в том продукте и с теми людьми, с которыми вам комфортно, вы продолжаете развиваться, и вашему работодателю это на руку, потому что вы закрываете узкие места проекта.

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

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

Стандартные истории про выгорание говорят, что нужно полежать на пляже и посмотреть в небо, пока не отойдете. В моем случае помогло переключение сферы деятельности. С одной стороны я понял, что work-life balance все-таки работает; вернувшись из отпуска, я понял, что те задачи, над которыми я сидел, я могу делать быстрее с одной стороны. С другой стороны эта новая сфера оказалась безумно интересной, и мы сделали очень многое. Запустили новые направления программы, взяли новых людей, запустили партнерства с университетами, стали выдавать сертификаты об окончании успешный большой перезапуск. После этого я сумел вернуться в разработку, но вся эта история о том, что не надо доводить до крайностей. Если вы чувствуете, что что-то идет не так, что вы работаете больше, чем можете это не хорошо ни вам, ни работодателю. Вы у себя один, а для работодателя это сложно прогнозируемая история, непонятно, когда вы не сможете идти дальше.

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

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

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

Насчет того, нужно ли сейчас идти в мобильную разработку этот вопрос я слышу часто. То, о чем я рассказывают, актуально для IT в целом, но для мобильной разработки в частности. Вы можете сказать, что сейчас разработчиков слишком много, рынок насыщен и новые устройства не покупаются. Я скажу, что в среднесрочной перспективе это направление точно останется актуальным. Хотя количество смартфонов подходит к линии насыщения, впереди нас ждут носимые устройства; умные часы уже многие таскают я тоже, кстати. Я почти уверен, что крупные компании скоро выпустят что-то новое. Нас ограничивает емкость аккумуляторов, но она медленно растет последние N лет. Люди, единожды попробовав не сидеть на одном месте ради решения задач и решать их с помощью носимых устройств, мобильников и других средств, вряд ли вернутся к этому паттерну поведения. Количество устройств будет увеличиваться, и разработчиков будет требоваться больше. Если вы ощущаете, что мобильная разработка это ваше, то в нее стоит идти. Если вы уже состоявшийся разработчик, то вы сможете прийти к нам; нам состоявшиеся разработчики всегда нужны. А если вы хотите, но еще не умеете для вас открыты наши школы. Мы не смотрим на ваши знания Objective C / Swift / Kotlin / Javascript; мы смотрим на базовые вещи, вроде знания алгоритмов и структур данных, понимания принципов ООП, умения писать алгоритмы типа сортировки и объяснять их сложность то есть, на простые вещи, которые изучают в универе. Это та самая шляпка для T вам остается только получить хорошие знания.

Добавлю про университеты. Признавая и принимая проблемы высшего образования я все-таки 6 лет учился и 5 лет преподавал, будучи в аспирантуре я считаю, что ВУЗ, хотя и не обязателен, очень желателен. Хотя ВУЗ и не даст специфических знаний то есть, если вы захотите быть крутым DevOps-специалистом или разработчиком мобильных приложений, то вам придется самому получать нужные знания вы сможете получить, помимо базовых вещей (вроде стрессоустойчивости и желания получать новые знания) широкое знание того, что в IT происходит. Вы выйдете тем самым T-shaped-специалистом.

В конце сентября или в октябре у нас начнется новый набор. Приходите к нам, пишите мне; буду очень рад ответить на вопросы.

По идее, проект надо менять каждый год-два, иначе застой.


Я в целом не спорю, хотя ситуации бывают разные. Кроме того, зависит от человека от того, что у вас в приоритете. Если в приоритете интерес проекта, то да. А может быть, в приоритете команда, с которой вы сработались, и вам не хочется переходить (хотя вы и понимаете, что дальше на этом проекте вы не будете развиваться); у меня такое тоже было. В общем, менять проект надо, но все ситуации уникальны.

Насколько распространена практика у product-менеджеров устанавливать приложения конкурентов и брать оттуда идеи новых фич?


Напрямую такого не делается, но говорить, что банки и другие IT-игроки совсем не смотрят друг на друга, нельзя. Понятно, что они смотрят; но прежде, чем что-то копировать, надо провести исследования. Хотя бы понять: конкурент это сделал, подумав, или просто так выкатил? И вести собственные исследования, конечно. Прежде, чем продукт будет разработан, проходит несколько этапов от дизайн-мышления и построения CJM. Нужно понять, нужен ли этот продукт пользователю, какие проблемы он решает. А просто копировать эта история больше про инди-разработчиков, когда они решают, что могут скопировать и сделать дешевле что-то успешное. Крупные компании все-таки идут своим путем, хотя и смотрят друг на друга.

Возможно, что будущее за дополненной реальностью?


Возможно. Я сам тоже считаю так последние несколько лет тот же Apple на своих конференциях для разработчиков (WWDC) делает упор на AR Kit / Reality Kit, движки работы с дополненной реальностью. И все это выглядит как переход от простого MVP к добавлению надстроек на него. Пользоваться этим в телефонах пока неудобно, и стоит дожидаться более удобных форм-факторов.

Как в Сбере происходит перевод сотрудника на уровень выше?


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

Как часто вы проходите обучение и курсы?


Надо сделать ремарку: я начинал заниматься разработкой в то время, когда нормальных курсов, к сожалению, почти не было. То есть, я вижу два способа обучения разработке: мой и правильный.
Правильный это через курсы, школы разработки (хорошо бы наши, но может быть любая школа с наставником, съевшим в этой технологии пуд соли). А вот мой вариант просто биться головой об эту тему, делать ошибки, смотреть варианты на StackWorkflow. Это тоже рабочий вариант, ты будешь получать готовые продукты, но в голове останется каша, с которой потом придется разбираться.

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

Какие мысли про Dart / Flutter, стоит ли тратить время?


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

MBA от Сбера что из себя представляет? Очное обучение внутри Сбера или во внешнем университете?


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

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

Достаточно ли внутренних курсов Сбербанка, или внешние тоже необходимы?


Это зависит от того, что вы хотите. Если нужно поддерживать свой уровень в том, чем вы занимаетесь (в разработке, допустим), то, во-первых, надо успешно решать рабочие задачи; во-вторых, комьюнити устроено так, что вы априори будете поддерживать свой уровень и развиваться, если захотите. В этом один из плюсов большой компании: это большое сообщество. Я сейчас не могу назвать другую компанию в России, где есть по 200 разработчиков на iOS и Android; такое комьюнити создает свою культуру наставничество, обучение. В целом, этого может быть достаточно: нужно тянуться к тем, кто впереди.

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

Удобно ли ездить в центр на работу и еще в Подмосковье в КоУ?


Ну, сейчас я нахожусь на удаленке так же, как и вся команда. Проблемы выезда из центра пока нет; когда мы выйдем с удаленки, я буду ездить в центр из Москвы. А в КоУ мы ездим не так часто: в рамках MBA-программы я бываю там примерно три раза в неделю.

Как много времени тратите сейчас на разработку, на каких языках?


Я сам разработчик мобильных приложений под iOS (изначально только iPhone и iPad, потом появились часы). Изначально мы писали на Objective C старом, с примесью 1.0, с использованием MRC). Сейчас у нас отдельный новый проект, в его рамках мы пишем на чистом Swift; то есть, MVVM с координаторами и сервисами, отсутствие реактивщины мы биндим все через делегаты. Насчет времени я уже говорил: стараюсь тратить побольше, но есть определенное количество важных рабочих встреч особенно на этапе старта продукта, поэтому получается часа 3-4 в день. Разработка мне все еще нравится, я стараюсь выкраивать, как могу.

Расскажите про Стэнфорд.


Однажды в рабочей почте было сообщение о том, что есть программа Stanford USRussia Forum, и сотрудники Сбербанка могут попробовать податься на нее. Я подался, прошел 3 или 4 этапа отбора, итоговое собеседование на английском, и попал в рабочую группу с еще тремя сотрудниками Сбера. Суммарно там каждый год 10-15 человек из России и 10-15 из Штатов. Программа направлена на улучшение взаимоотношений между странами; создаются смешанные группы из наших и американцев, которые работают над научными проблемами. Наш год был первым, когда появились конкретные технические проблемы: до этого были социальные и правовые вещи. Наша группа была FinTech (финансы и технологии). Год мы делали исследование, а потом защищали его в Стэнфорде. Были на ужине с профессором Зимбардо, который провел знаменитый эксперимент (к нему есть вопросы, но опыт-то классный). В целом, замечательный кейс, который позволял окунуться в другую сферу. Оставаясь в области финтеха, мы исследовали децентрализованные технологии на примере блокчейна, например, и встретились с кучей выдающихся людей, которые этим занимаются как в России, так и в Штатах.

Бэкендом не занимаетесь? Часто ли проводите собеседования?


Собеседования проводим часто. Я участвую собеседованиях как в Сбербанк-Онлайн, так и в новый проект Сбербанк-Инвестор. Плюс, когда речь идет о школах, в собеседованиях на прием и на выпуск я тоже стараюсь участвовать. В скольких именно зависит от нагрузки: может быть и 0, и 10 в неделю, но обычно 1-2. Бэкендом я не занимаюсь, но интересуюсь. Хотел бы попробовать, когда MBA завершится и станет больше свободного времени.

Как выбираете стек для разработки? Требования формирует заказчик?


Это зависит. Если мы говорим про отдельный модуль для Сбербанк-Онлайн, то стек ограничен существующим продуктом. Если продукт новый, то стек выбирает, наверно, не бизнес-заказчик, а IT-специалист, подсвечивая плюсы и риски для бизнеса. Например, если взять одну технологию она удобная, классная, быстра, но она отсечет некоторый процент аудитории. Итоговое решение примет, конечно, представитель заказчика, но стек формируют IT-специалисты. В целом, мы смотрим на то, чтобы стек был удобным, достаточно новым, но не хайповым; так, сейчас брать Swift UI на enterprise-проект преждевременно это не отменяет того, что нужно опробовать эту технологию, но она должна устояться. То есть, не надо брать то, что только вышло, хайпово и явно будет менять API в ближайшие несколько лет, а также то, что уже полумертво.

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

Что нужно, чтобы попасть в команду беспилотных автомобилей?


Надо просто подать заявку. Я видел вакансию в направление, связанное с беспилотными автомобилями, у себя в Facebook. Это не какая-то секретная информация; если организаторы потом передадут мне этот вопрос, я поделюсь ссылкой.

Что является Сбербанк-Онлайн, а что подпроектом?


Сбербанк-Онлайн например, на платформе iOS это проект, состоящий из подпроектов (подмодулей). За каждый из них отвечает команда или группа команд. Внутри себя они могут, не отходя сильно от гайдов разработки Сбера, некоторые вещи определять самостоятельно например, архитектурный подход внутри этого модуля. Важно, чтобы, например, API этого модуля все еще позволял к нему обращаться, но в остальном все, что происходит внутри него (если оно не идет вразрез с гайдами Сбербанк-Онлайн и базовыми подходами) остается на усмотрение его главных разработчиков. Из таких модулей и собирается итоговый проект.

То есть, все платежи и переводы это Сбербанк-Онлайн?


Да, всё СБОЛ. И кредиты, и депозиты. СБОЛ это большой дом из разных кирпичиков: процессов (например, оплаты) и продуктов (например, депозитов). И их разработка может идти параллельно.

Из СБОЛ можно зайти в Око?


Да, но вы попадете в другое приложение. Все, что внутри Сбербанк-Онлайн это одна история, это части Сбербанк-Онлайн; когда вы переходите в другое приложение, вы переходите в другую часть экосистемы. Например, из СБОЛ можно зайти в Око, Доставку посылок, Инвестиции; все это отдельные приложения из экосистемы Сбербанк-Онлайн. То есть, хотя они и самостоятельны, между ними осуществляется нормальная навигация, они интегрированы с СБОЛ, в часть из них можно заходить по универсальному Сбербанк-ID.

Как в Сбере запускается новый продукт, и как в нем стать PO? Например, если идея твоя не факт, что ты будешь PO.


Здесь возможно несколько подходов. Первый инициировать изменения. То есть, не просто прийти и предложить идею нового продукта, а предоставить план развития этого продукта. Если у вас есть релевантный опыт и понимание того, как развивать продукты, то гораздо проще будет взять вас так как будет очевидно, что вы понимаете, что с этим продуктом делать чем искать другого человека. Часто бывает так, что PO становятся люди, не имеющие отношения к идее; допустим, когда идея носится в воздухе, или когда она давно уже должна была быть реализована, и теперь стал доступен человек с опытом управления продуктами. Есть разные паттерны.

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

Какие крутые книги посоветуете?


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



Что было ранее


  1. Илона Папава, Senior Software Engineer в Facebook как попасть на стажировку, получить оффер и все о работе в компании
  2. Борис Янгель, ML-инженер Яндекса как не пополнить ряды стремных специалистов, если ты Data Scientist
  3. Александр Калошин, СEO LastBackend как запустить стартап, выйти на рынок Китая и получить 15 млн инвестиций.
  4. Наталья Теплухина, Vue.js core team member, GoogleDevExpret как пройти собеседование в GitLab, попасть в команду разработчиков Vue и стать Staff-engineer.
  5. Ашот Оганесян, основатель и технический директор компании DeviceLock кто ворует и зарабатывает на ваших персональных данных.
  6. Сания Галимова, маркетолог RUVDS как жить и работать с психиатрическим диагнозом. Часть 1. Часть 2.
  7. Илья Кашлаков, руководитель фронтенд-отдела Яндекс.Денег как стать тимлидом фронтендеров и как жить после этого.
  8. Влада Рау, Senior Digital Analyst в McKinsey Digital Labs как попасть на стажировку в Google, уйти в консалтинг и переехать в Лондон.
  9. Ричард Левелорд Грей, создатель игр Duke Nukem 3D, SiN, Blood про личную жизнь, любимые игры и о Москве.
  10. Вячеслав Дреер, гейм-дизайнер и продюсер игр с 12-летним стажем про игры, их жизненный цикл и монетизацию
  11. Андрей, технический директор GameAcademy как видеоигры помогают прокачивать реальные навыки и найти работу мечты.
  12. Александр Высоцкий, ведущий PHP-разработчик Badoo как создаются Highload проекты на PHP в Badoo.
  13. Андрей Евсюков, заместитель CTO в Delivery Club про найм 50 синьоров за 43 дня и о том, как оптимизировать фреймворк найма
  14. Джон Ромеро, создатель игр Doom, Quake и Wolfenstein 3D байки о том, как создавался DOOM
  15. Паша Жовнер, создатель тамагочи для хакеров Flipper Zero о своем проекте и другой деятельности
  16. Татьяна Ландо, лингвист-аналитик в Google как научить Google-ассистента человеческому поведению



Подробнее..

Перевод Программисту. 10 ценных GitHub-репозиториев

19.09.2020 16:20:36 | Автор: admin
GitHub это платформа, дающая программистам отличные инструменты для организации работы над кодом. Но в GitHub-репозиториях, помимо кода, можно найти массу ценных учебных материалов. Я, например, занимаюсь разработкой ПО и постоянно ищу репозитории, которые могут чем-то мне пригодиться. Вот 10 моих любимых GitHub-проектов.



1. danistefanovic/build-your-own-x


Звёзды GitHub: около 82 тысяч

Репозиторий build-your-own-x это фантастический ресурс, который предназначен для всех, кто хочет что-то создать. Такие люди могут найти тут массу идей, каждая из которых способна лечь в основу их собственного проекта. Кроме того, в этом репозитории, если даже не использовать его для поиска идей, можно найти много интересных материалов.

2. trekhleb/javascript-algorithms


Звёзды GitHub: около 81 тысячи

Одно из отличий программиста (Software Engineer) и разработчика (Software Developer) заключается в том, что программист, скорее всего, лучше, чем разработчик, разбирается в алгоритмах и структурах данных. Но вне зависимости от того, что вы уже знаете, вы сможете найти в репозитории javascript-algorithms что-то такое, что вас заинтересует. А именно, здесь имеется большой набор материалов по алгоритмам и структурам данных с примерами их реализации на JavaScript. Здесь же можно найти ответы на вопросы, которые встречаются на собеседованиях.

3. ossu/computer-science


Звёзды GitHub: около 64 тысяч

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

4. 30-seconds/30-seconds-of-code


Звёзды GitHub: около 59 тысяч

В репозитории 30-seconds-of-code имеется более сотни коротких примеров кода, написанного на JavaScript. Среди этих примеров можно встретить, скажем, реализации неких алгоритмов, а так же код, который может пригодиться программисту для решения разных рабочих задач. Полагаю, этот репозиторий, определённо, достоин вашего внимания.

5. gothinkster/realworld


Звёзды GitHub: около 46 тысяч

Хотелось вам когда-нибудь узнать о том, как создают реальные приложения с использованием некоего языка или некоей технологии? Если так значит репозиторий realworld, представляющий проект RealWorld example apps, создан специально для вас. Многие приложения-примеры представляют собой клоны типичного списка дел, известного как TODO-приложение. Репозиторий realworld идёт другим путём. А именно, здесь можно найти тщательно проработанный проект, похожий на medium.com. При этом тут показаны варианты данного проекта, созданные с использованием различных технологий разработки клиентских и серверных частей приложений.

6. EbookFoundation/free-programming-books


Звёзды GitHub: около 160 тысяч

В репозитории free-programming-books можно найти множество ссылок на бесплатные книги по самым разным темам, имеющим отношение к программированию.

7. donnemartin/system-design-primer


Звёзды GitHub: около 107 тысяч

В репозитории system-design-primer можно найти пособие по проектированию систем. Умение проектировать крупномасштабные системы это весьма ценный навык, который способен найти практическое применение во многих сферах. Кроме того, большие компании, нанимающие специалистов на должности старших программистов (и на более высокие должности) ожидают наличия у таких специалистов подобных навыков. Если вы хотите подготовиться к созданию крупномасштабных систем, то вам, несомненно, стоит заглянуть в этот репозиторий.

8. vinta/awesome-python


Звёзды GitHub: около 86 тысяч

В репозитории awesome-python представлена тщательно отобранная коллекция библиотек, фреймворков и различных проектов, написанных на Python. Это отличный ресурс для тех, кто изучает Python. Этот репозиторий подходит как для начинающих, так и для опытных программистов.

9. goldbergyoni/nodebestpractices


Звёзды GitHub: около 52 тысяч

Я постоянно читаю материалы с различными рекомендациями и лучшими практиками по Node.js и никак не могу начитаться. Именно поэтому я, когда нашёл репозиторий nodebestpractices, понял, что он увлечёт меня надолго. Одна из бед программистов-самоучек заключается в том, что они далеко не всегда начинают с того, что относится к разряду лучших практик. А ресурсы, подобные этому репозиторию, помогают профессиональному росту таких программистов.

10. josephmisiti/awesome-machine-learning


Звёзды GitHub: около 46 тысяч

Репозиторий awesome-machine-learning похож на вышерассмотренный awesome-python. Здесь можно найти массу ценных материалов по машинному обучению.

Итоги


Надеюсь, вы нашли среди вышеперечисленных репозиториев такие, материалы которых принесут вам пользу.

А у вас есть любимые GitHub-репозитории, которые вы могли бы порекомендовать другим?



Подробнее..

Как Data Science продает вам рекламу? Интервью с инженером Unity

20.09.2020 14:22:27 | Автор: admin
Неделю назад в наших соцсетях выступал Никита Александров Data Scientist в Unity Ads, где он улучшает алгоритмы конверсии. Никита сейчас живет в Финляндии, и кроме прочего он рассказал об IT-жизни в стране.

Делимся с вами расшифровкой и записью интервью



Меня зовут Никита Александров, я вырос в Татарстане и там же окончил школу, занимался олимпиадами по математике. После этого поступил на факультет компьютерных наук ВШЭ и там закончил бакалавриат. В начале 4 курса съездил на учебу по обмену, провел семестр в Финляндии. Мне там понравилось, я поступил в магистратуру университета Аалто, хотя не закончил ее полностью я закончил все курсы и начал писать диплом, но ушел работать в Unity, не получив степень. Сейчас я работаю в Unity data scientist-ом, отдел называется Operate Solutions (раньше он назывался Monetization); непосредственно моя команда занимается доставкой рекламы. То есть, внутриигровое рекламы той, которая выдается, когда вы играете в мобильную игру и нужно заработать дополнительную жизнь, например. Я работаю над улучшением конверсии рекламы то есть, делаю так, чтобы игрок с большей вероятностью прошел по рекламе.

Как ты переехал?


Сначала я приехал в Финляндию учиться на семестр по обмену, после этого вернулся в Россию и закончил диплом. Потом я поступил на магистратуру в университет Аалто по machine learning / data science. Так как я учился по обмену, мне даже не пришлось сдавать экзамен по английскому; поступил легко, я знал, на что поступаю. Живу здесь уже 3 года.

Финский необходим?


Он необходим, если вы собираетесь учиться здесь на бакалавра. Очень мало программ на английском языке для бакалавров, нужен финский или шведский это второй государственный язык, некоторые университеты обучают на шведском. Но в магистратуре и PhD большинство программ англоязычные. Если говорить про ежедневное общение и быт тут большинство людей говорит на английском языке, примерно 90%. Люди нормально живут целыми годами (мой коллега живет вообще 20 лет) без финского языка.

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

Отличается ли качество обучения от университетов РФ? Дают ли всю необходимую базу для устройства джуниором?


Качество отличается. Как мне кажется, в России пытаются сразу давать много всего: сразу дифференциальные уравнения, дискретная математика и многое другое. На самом деле, нужно брать дополнительные материалы, в качестве курсовой или дипломной работы, что-то новое постигать самостоятельно, ходить на какие-то курсы. Здесь же мне было легко в магистратуре; я знал многое из того, что проходилось. Опять же, в Финляндии бакалавр это еще не специалист, тут по-прежнему есть такое разделение. Вот если ты магистр, то можно устраиваться на работу. Я бы сказал, что в магистратуре в Финляндии важны социальные скиллы, важно участвовать, быть активным; есть исследовательские проекты. Если есть интересные для вас исследования, и вы хотите глубже копнуть, то можно получить контакты профессора, работать в этом направлении, развиваться.

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

Чем компания в Финляндии мотивирует сотрудников, какие плюшки?


Кроме очевидного (зарплаты), есть социальные плюшки. Например, количество декретного отпуска для родителей. Есть медицинские страховки, акции, опционы. Бывает необычное начисление отпускных дней. Ничего особенного, в основном.

У нас в офисе есть сауна, например.

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

Что посоветовать гуманитарию для входа в IT?


Повторять школьный курс и поступать в ВШЭ? Часто прогеры имею математическую базу/олимпиады

Я советую, конечно, подтянуть математику. Но не обязательно повторять школьный курс. Точнее, его надо повторять только в том случае, если не помните совсем ничего. Кроме того, надо определиться, в какое именно IT вы хотите пойти. Для фронтендера не обязательно знать математику: надо просто брать курсы по фронтенду и учиться. Моя подруга недавно решила записаться на курсы от компании Accenture, она сейчас учит Scala; она не гуманитарий, но опыта программирования у нее не было никакого. В зависимости от того, что вы хотите программировать и на чем, нужно разное количество математики. Конечно, для Machine Learning-специальности нужна математика, в том или ином ключе. Но, если вы хотите просто попробовать есть много разных туториалов, открытой информации, мест, где можно поиграть с нейросетью или построить самостоятельно, или скачать готовую, поменять параметры и посмотреть, как она меняется. Все зависит от того, как сильна мотивация.

Если не секрет зарплаты, опыт, на чем пишете?


Я пишу на Python это универсальный язык для machine learning и data science. Опыт был различный опыт; я был простым инженером в нескольких компаниях, был на стажировке несколько месяцев в Москве. Не было постоянной работы до Unity. Туда я пришел тоже как стажер, поработал стажером 9 месяцев, потом сделал перерыв, а теперь работаю уже год. Зарплата конкурентоспособная, выше медианной для региона. Начинающий специалист будет зарабатывать от 3500 EUR; в разных компаниях это разнится. В общем, 3.5-4 начинающая зарплата.

Какие книги и туториалы посоветуете?


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

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

Сколько остается чистыми?


После налогов надо брать налоги плюс 8% (которые как бы не налог, но налог) остается 2/3 зарплаты. Ставка динамическая чем больше зарабатываете, тем больше налог.

Какие компании обращаются за рекламой?


Нужно понимать, что Unity / Unity Ads занимаются рекламой мобильных игр. То есть, у нас есть ниша, мы очень хорошо разбираемся в мобильных играх, на Unity можно их создавать. Как только вы написали игру, вы хотите на ней заработать, и монетизация один из способов.
Компании за рекламой могут обращаться любые интернет-магазины, финансовые приложения разнообразные. Реклама всем нужна. Конкретно у нас основные клиенты это разработчики мобильных игр.

Какие проекты лучше делать для повышения скиллов?


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

Чем уже ваши интересы (например, какой-нибудь reinforcement learning), тем сложнее найти проекты. Можно попробовать поучаствовать в Kegel-соревнованиях: заходите на kegel.com, там много различных соревнований по машинному обучению. Берете то, к чему уже приложен какой-то baseline; скачиваете и начинаете этим заниматься. То есть, много способов: можно заниматься самостоятельно, можно походить онлайн-курс бесплатный или платный, можно участвовать в соревнованиях. Если вы хотите искать работу в Facebook, Google и так далее, то нужно научиться решать алгоритмические задачи то есть, надо идти в LeetCode, набивать руку там для того, чтобы проходить собеседования.

Опишите краткий роадмап обучения Machine Learning?


Расскажу в идеале, не претендуя на универсальность. Вы сначала проходите математические курсы в универе, вам нужно знание и понимание линейной алгебры, теории вероятности и статистики. После этого вам кто-то рассказывает про ML; если вы живете в крупном городе, то в нем должны быть школы, предлагающие курсы по ML. Самая известная ШАД, Школа анализа данных Яндекса. Если вы в нее пройдете, и вы сможете проучиться два года, то вы получите всю базу ML. Вам нужно будет дальше оттачивать скилл в исследованиях и в работе.

Если и другие варианты: например, у Тинькова есть курсы по машинному обучению с возможностью трудоустроиться в Tinkoff после окончания. Если вам это удобно записывайтесь на эти курсы. Бывают разные пороги вхождения: например, в ШАД есть вступительные испытания.
Если вы не хотите идти на обычные курсы, можно начать с онлайн-курсов, которых более чем достаточно существует. Это зависит от вас; если у вас хороший английский хорошо, найти будет легко. Если нет, то, возможно, тоже что-то да есть. Те же лекции ШАДа есть в открытом доступе.
После получения теоретической базы можно идти вперед на стажировки, исследования и так далее.

Можно ли самому обучиться machine learning? Встречали ли вы такого программиста?


Я думаю, да. Только нужно иметь сильную мотивацию. Кто-то может сам выучить английский язык, например, а кому-то надо идти на курсы, и только так этот человек сможет выучиться. С ML все так же. Хотя я не знаю такого программиста, который бы научился всему сам, но, возможно, у меня просто мало знакомых; все мои друзья как раз обучались обычным способом. Я не берусь говорить, что 100% нужно обучаться так: главное ваше желание, ваше время. Конечно, если у вас не математической базы, придется потратить много времени, чтобы наработать ее.
Вдобавок к пониманию того, что значит быть data scientistом: я сам не занимаюсь data sci
ence как research. Наша компания это не лаборатория, где мы разрабатываем методы, закрываясь на полгода в лаборатории. Я непосредственно работаю с production, и мне нужны инженерные скиллы; мне нужно писать код, иметь инженерные навыки, чтобы понимать, что как работает. Люди часто опускают эти особенности, когда говорят про data science. Есть множество историй о том, как люди с PhD пишут нечитаемый ужасный неструктурированный код, у них возникают большие проблемы после того, как они решают пойти в индустрию. То есть, в совокупе с Machine Learning не нужно забывать про инженерные скиллы.

Data science это позиция, не говорящая о себе. Вы можете устроиться компанию, которая занимается data science, и вы станете писать SQL-запросы, или будет простая логистическая регрессия. В принципе, это тоже уже machine learning, но в каждой компании есть свое понимание того, что такое data science. Например, моя подруга в Facebook рассказала, что data science это когда люди просто запускаю статистические эксперименты: кликают на кнопочки, собирают результаты и потом предоставляют их. При этом я сам улучшаю методы конверсии и алгоритмы; в некоторых других компаниях эта специальность может называться machine learning engineer. В разных компаниях все может быть по-разному.

Какие библиотеки используете?


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

В Unity есть не только data scientistы, которые оптимизируют алгоритмы конверсии, но и GameTune это такая вещь, где вы улучшаете метрики в плане прибыли или retention с помощью различных туториалов. Допустим, кто-то поиграл в игру и сказал: мне непонятно, мне неинтересно забросил; кому-то слишком легко, наоборот он тоже забросил. Поэтому нужен GameTune это инициатива, которая адаптирует сложность игр по способностям геймера, или по истории игр, или по тому, как часто он что-то покупает внутри приложений.

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

Можно поговорить непосредственно про Unity Ads. Если вы решили написать игру, и решили опубликовать ее и заработать, то придется решить некоторые трудные задачи.

Я начну с примера: вот Apple анонсировал запуск iOS 14. В ней потенциальный геймер может зайти в приложение и сказать, что не хочет шарить свой Device-ID кому-либо. При этом он соглашается с тем, что качество рекламы ухудшится. Но в то же время это сложная задача для нас, потому что, если мы не сможем идентифицировать вас, то мы не сможем собирать определенные метрики, и просто будем иметь меньше информации о вас. Оптимизировать работу в условиях мира, который больше стремится к конфиденциальности, к защите данных, для data scientistа все труднее данных становится все меньше, как и доступных методов.

Помимо Unity, есть гиганты вроде Facebook и Google и, казалось бы, зачем нужен Unity Ads? Но нужно понимать, что в разных странах эти рекламные сети могут работать по-разному. Условно говоря, есть Tier 1-страны (Америка, Канада, Австралия); есть Tier 2-страны (Азия), есть Tier 2 (Индия, Бразилия). Рекламные сети могут работать в них по-разному. Также имеет значение используемый вид рекламы. Обычный ли вид, или реклама за вознаграждение (rewardable) когда, например, чтобы продолжить с того же места после game over, нужно просмотреть рекламу. Разные виды рекламы, разные люди. В каких-то странах одна рекламная сеть лучше работает, в каких-то другая. И еще, как дополнительное замечание я слышал, что интеграция AdMob, которая у Google, сложнее, чем Unity.

То есть, если вы создали игру в Unity, то вы автоматически интегрированы в Unity Ads. Разница в простоте интеграции. Что можно посоветовать: есть такая вещь, как медиация; в ней есть разные позиции: можно устанавливать позиции в waterfall (водопаде) для постановки рекламных placements. Можно сказать, например, так: хочу, чтобы по приоритету показывался сначала Facebook, потом Google, потом Unity. И, если Facebook и Google решат не показывать рекламу, то Unity покажет. Чем больше у вас рекламных сетей тем лучше. Это можно рассматривать как инвестирование, но вы инвестируете сразу в разное количество рекламных сетей.
Еще можно рассказать про то, что имеет значение для успеха рекламной кампании. На самом деле, здесь нет ничего особенного: нужно следить, чтобы реклама соответствовала контенту вашего приложения. Можно, например, поискать в Youtube app ads mafia и посмотреть, насколько реклама может не соответствовать контенту. Еще есть приложение Homescapes (или Gardenscapes?). Может иметь значение то, правильно ли настроена кампания: чтобы реклама на английском языке показывалась англоязычной аудитории, на русском русскоязычной. Очень часто бывают ошибки в этом: люди просто не разбираются, устанавливают наобум.
Вам нужно создавать различные прикольные видео, подумывать над форматом, думать, как часто обновлять их. В крупных компаниях этим занимаются специальные люди user acquisition managers. Если вы одиночный разработчик, то вам это не нужно, или нужно по достижению определенного роста.

Какие дальнейшие планы?


По-прежнему работать там, где я сейчас. Может быть, я получу финское гражданство это возможно после 5 лет проживания (если меньше 30 лет, нужно еще и отслужить, если человек не сделал этого в другой стране).

Почему переехали в Финляндию?


Да, это не слишком популярная страна для переезда IT-специалиста. Многие переезжают семьями, потому что здесь хорошие социальные плюшки детские сады, ясли, больше декретные отпуска для любого из родителей. Почему переехал я сам мне тут просто понравилось. Могло бы понравиться где угодно, наверно, но Финляндия довольно близкая по культурному менталитету; различия с Россией есть, конечно, но есть и сходство. Она маленькая, безопасная, и никогда не будет вовлечена в какие-то большие заварушки. Это не условная Америка, где может попасться президент, которого не любят, и начнется что-то из-за этого; и не Великобритания, которая вдруг захочет выходить из ЕС, и тоже будут проблемы. Тут всего 5 миллионов человек. Даже с эпидемией коронавируса Финляндия справилась достаточно достойно, по сравнению с другими странами.

Собираетесь возвращаться в Россию?


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

Про магистратуру в Финляндии


Ничего особенного. Если говорить про контент лекций это просто набор слайдов; есть теоретический материал, семинар с практикой, где оттачивается эта теория, потом экзамен по всем этим материалам (теория и задачи).

Особенность: из магистратуры не выгоняют. Если не сдали экзамен, то этот курс надо будет просто пройти в следующем семестре. Есть только ограничение на общее время обучения: на бакалавра не более 7 лет, на магистра 4 года. Можно спокойно закончить все за два года, кроме одного курса, и растянуть его на 2 года, или брать академы.

Работа в Москве и в Финляндии отличается сильно?


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

Но в плане работы, я думаю, все плюс-минус одинаково. Что касается рынка IT-труда Финляндии, касаемо machine learning некоторые замечают, что для специальностей, связанных с ML, требуют PhD или хотя бы магистров. Я считаю, что в обозримом будущем это изменится. Тут до сих пор есть предубеждение: если ты бакалавр, то ты не можешь быть сформированным специалистом, а вот если магистр у тебя есть специализация, и ты можешь работать. А если PhD, то уже все совершенно круто, и ты можешь делать IT-исследования. Хотя, как мне кажется, даже люди, которые закончили PhD, могут быть совершенно не интегрированы в индустрию, и могут не понимать, что индустрия это не только алгоритмы и методы, но и бизнес. Если вы не понимаете бизнес, то я не знаю, как вы сможете врастать компанию и понимать, как работает вся эта мета-система.

Поэтому идея переехать в магистратуру и сразу найти работу это довольно сложно; если вы переезжаете в Финляндию с бакалаврским дипломом вы ноунейм. Нужно иметь какой-нибудь опыт работы, чтобы сказать: я работал в Яндексе, в Mail, в Лаборатории Касперского и т.д.

Как прожить на 500 EUR в Финляндии?


Прожить можно. Если вы студент, нужно понимать, что у вас не будет стипендии; ЕС может предоставлять деньги, но только для тех, кто учится по обмену. Если вы поступаете в университет Финляндии, то нужно понимать, как вы будете жить. Есть несколько вариантов; если вы поступаете в магистратуру с PhD-треком (то есть, одновременно в магистратуру и на PhD), то с первого же года вы будете делать исследовательскую работу и получать за это деньги.
Небольшие, но студенту будет хватать. Второй вариант подработка; например, я был учебным ассистентом по определенному курсу и зарабатывал 400 EUR в месяц.

Кстати, в Финляндии хорошие студенческие бенефиты. Можно заселиться в общагу за 300 или 200 EUR за комнату, можно питаться в студенческих столовых с фиксированной ценой (все, что вы накладываете себе в тарелку 2.60 EUR). Некоторые стараются завтракать, обедать и ужинать в столовой за 2.60; если так делать, то можно прожить на 500 EUR. Но это самый минимум.

Куда можно поступить, если хочешь быть программистом?


Можно поступить на факультет компьютерных наук ВШЭ, МФТИ ФИВТ и ФУПМ, или ВМК МГУ, например. Можно что-то и в Петербурге найти. Но я не в курсе точной ситуации с обучением machine learning, попробуйте загуглить эту тему.

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

Естественно, жизнь в Финляндии не вполне сказочная переехал, и сразу все стало круто. Любой мигрант все равно встречается с культурным шоком. В разных странах разные люди, разный менталитет, разные законы. Например, здесь нужно самому заботиться о налогах заполнять самому налоговую карту; покупка машины, аренда жилья многое работает по-другому. Это достаточно трудно, если вы решите переехать. Народ здесь не сказать чтобы очень социальный, погода как в Санкт-Петербурге в ноябре-декабре может быть по 1-2 солнечных дня. Некоторые даже впадают в депрессию здесь; они приезжают с уверенностью, что они здесь очень нужны, но это оказывается не так, и нужно зарабатывать деньги, играя по чужим правилам. Это всегда риск. Всегда есть вероятность, что вам придется вернуться, потому что вы просто не приживетесь.

Какой совет дашь начинающим программистам?


Я советую попробовать как можно больше, понять, что вас действительно интересует. Старайтесь не зацикливаться в одной сфере: попробуйте Android-разработку, frontend/backend, Java, Javascript, ML, другие вещи. И, как я уже сказал, нужно быть активным, идти на контакт, интересоваться, что происходит; что делают друзья, коллеги, знакомые. Ходите на воркшопы, семинары, лекции, знакомьтесь с людьми. Чем больше у вас связей, тем проще понять, что интересного происходит.

Где еще используется Unity, кроме игр?


Unity старается перестать быть чисто игровым движком. Например, он используется для рендеринга CGI-роликов: если вы разрабатываете машину, например, и хотите сделать рекламу вы, конечно, захотите сделать хороший ролик. Я слышал, что Unity используется и для архитектурного планирования. То есть, везде, где нужна визуализация, можно применять Unity. Если погуглить, можно найти интересные примеры.

Если хотите задать вопрос не стесняйтесь находить меня во всех социальных сетях.



Что было ранее


  1. Илона Папава, Senior Software Engineer в Facebook как попасть на стажировку, получить оффер и все о работе в компании
  2. Борис Янгель, ML-инженер Яндекса как не пополнить ряды стремных специалистов, если ты Data Scientist
  3. Александр Калошин, СEO LastBackend как запустить стартап, выйти на рынок Китая и получить 15 млн инвестиций.
  4. Наталья Теплухина, Vue.js core team member, GoogleDevExpret как пройти собеседование в GitLab, попасть в команду разработчиков Vue и стать Staff-engineer.
  5. Ашот Оганесян, основатель и технический директор компании DeviceLock кто ворует и зарабатывает на ваших персональных данных.
  6. Сания Галимова, маркетолог RUVDS как жить и работать с психиатрическим диагнозом. Часть 1. Часть 2.
  7. Илья Кашлаков, руководитель фронтенд-отдела Яндекс.Денег как стать тимлидом фронтендеров и как жить после этого.
  8. Влада Рау, Senior Digital Analyst в McKinsey Digital Labs как попасть на стажировку в Google, уйти в консалтинг и переехать в Лондон.
  9. Ричард Левелорд Грей, создатель игр Duke Nukem 3D, SiN, Blood про личную жизнь, любимые игры и о Москве.
  10. Вячеслав Дреер, гейм-дизайнер и продюсер игр с 12-летним стажем про игры, их жизненный цикл и монетизацию
  11. Андрей, технический директор GameAcademy как видеоигры помогают прокачивать реальные навыки и найти работу мечты.
  12. Александр Высоцкий, ведущий PHP-разработчик Badoo как создаются Highload проекты на PHP в Badoo.
  13. Андрей Евсюков, заместитель CTO в Delivery Club про найм 50 синьоров за 43 дня и о том, как оптимизировать фреймворк найма
  14. Джон Ромеро, создатель игр Doom, Quake и Wolfenstein 3D байки о том, как создавался DOOM
  15. Паша Жовнер, создатель тамагочи для хакеров Flipper Zero о своем проекте и другой деятельности
  16. Татьяна Ландо, лингвист-аналитик в Google как научить Google-ассистента человеческому поведению
  17. Путь от джуна до исполнительного директора в Сбербанке. Интервью с Алексеем Левановым



Подробнее..

Перевод Секреты JavaScript-функций

20.09.2020 18:23:47 | Автор: admin
Каждый программист знаком с функциями. В JavaScript функции отличаются множеством возможностей, что позволяет называть их функциями высшего порядка. Но, даже если вы постоянно пользуетесь JavaScript-функциями, возможно, им есть чем вас удивить.



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

Чистые функции


Функция, которая соответствует двум следующим требованиям, называется чистой:

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

Рассмотрим пример:

function circleArea(radius){return radius * radius * 3.14}

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

Вот ещё один пример:

let counter = (function(){let initValue = 0return function(){initValue++;return initValue}})()

Испытаем эту функцию в консоли браузера.


Испытание функции в консоли браузера

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

А вот ещё пример:

let femaleCounter = 0;let maleCounter = 0;function isMale(user){if(user.sex = 'man'){maleCounter++;return true}return false}

Здесь показана функция isMale, которая, при передаче ей одного и того же аргумента, всегда возвращает один и тот же результат. Но у неё есть побочные эффекты. А именно, речь идёт об изменении глобальной переменной maleCounter. В результате эту функцию чистой назвать нельзя.

Зачем нужны чистые функции?


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

1. Код чистых функций понятнее, чем код обычных функций, его легче читать


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

2. Чистые функции лучше поддаются оптимизации при компиляции их кода


Предположим, имеется такой фрагмент кода:

for (int i = 0; i < 1000; i++){console.log(fun(10));}

Если fun это функция, не являющаяся чистой, то во время выполнения этого кода данную функцию придётся вызвать в виде fun(10) 1000 раз.

А если fun это чистая функция, то компилятор сможет оптимизировать код. Он может выглядеть примерно так:

let result = fun(10)for (int i = 0; i < 1000; i++){console.log(result);}

3. Чистые функции легче тестировать


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

Вот простой пример. Чистая функция принимает в виде аргумента массив чисел и прибавляет к каждому элементу этого массива число 1, возвращая новый массив. Вот её сокращённое представление:

const incrementNumbers = function(numbers){// ...}

Для проверки такой функции достаточно написать модульный тест, напоминающий следующий:

let list = [1, 2, 3, 4, 5];assert.equals(incrementNumbers(list), [2, 3, 4, 5, 6])

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

Функции высшего порядка.


Функция высшего порядка это функция, которая обладает как минимум одной из следующих возможностей:

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

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

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

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

const arr1 = [1, 2, 3];const arr2 = [];for (let i = 0; i < arr1.length; i++) {arr2.push(arr1[i] * 2);}

Если же над задачей поразмыслить, то окажется, что у объектов типа Array в JavaScript есть метод map(). Этот метод вызывают в виде map(callback). Он создаёт новый массив, заполненный элементами массива, для которого его вызывают, обработанными с помощью переданной ему функции callback.

Вот как выглядит решение этой задачи с использованием метода map():

const arr1 = [1, 2, 3];const arr2 = arr1.map(function(item) {return item * 2;});console.log(arr2);

Метод map() это пример функции высшего порядка.

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

Кеширование результатов работы функций


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

function computed(str) {// Представим, что в этой функции проводятся ресурсозатратные вычисленияconsole.log('2000s have passed')// Представим, что тут возвращается результат вычисленийreturn 'a result'}

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

Как оснастить функцию кешем? Для этого можно написать особую функцию, которую можно использовать в качестве обёртки для целевой функции. Этой особой функции мы дадим имя cached. Данная функция принимает целевую функцию в виде аргумента и возвращает новую функцию. В функции cached можно организовать кеширование результатов вызова оборачиваемой ей функции с использованием обычного объекта (Object) или с помощью объекта, представляющего собой структуру данных Map.

Вот как может выглядеть код функции cached:

function cached(fn){// Создаёт объект для хранения результатов, возвращаемых после каждого вызова функции fn.const cache = Object.create(null);// Возвращает функцию fn, обёрнутую в кеширующую функцию.return function cachedFn (str) {// Если в кеше нет нужного результата - вызывается функция fnif ( !cache[str] ) {let result = fn(str);// Результат, возвращённый функцией fn, сохраняется в кешеcache[str] = result;}return cache[str]}}

Вот результаты экспериментов с этой функцией в консоли браузера.


Эксперименты с функцией, результаты работы которой кешируются

Ленивые функции


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

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

Предположим, нам нужно написать функцию foo, которая всегда возвращает объект Date, созданный при первом вызове этой функции. Обратите внимание на то, что нам нужен объект, созданный именно при первом вызове функции.

Её код может выглядеть так:

let fooFirstExecutedDate = null;function foo() {if ( fooFirstExecutedDate != null) {return fooFirstExecutedDate;} else {fooFirstExecutedDate = new Date()return fooFirstExecutedDate;}}

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

А именно, функцию мы можем переписать так:

var foo = function() {var t = new Date();foo = function() {return t;};return foo();}

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

Это был очень простой условный пример. Давайте теперь рассмотрим нечто, более близкое к реальности.

При подключении к элементам DOM обработчиков событий нужно выполнять проверки, позволяющие обеспечить совместимость решения с современными браузерами и с IE:

function addEvent (type, el, fn) {if (window.addEventListener) {el.addEventListener(type, fn, false);}else if(window.attachEvent){el.attachEvent('on' + type, fn);}}

Получается, что каждый раз, когда мы вызываем функцию addEvent, в ней проверяется условие, которое достаточно проверить лишь один раз, при её первом вызове. Сделаем эту функцию ленивой:

function addEvent (type, el, fn) {if (window.addEventListener) {addEvent = function (type, el, fn) {el.addEventListener(type, fn, false);}} else if(window.attachEvent){addEvent = function (type, el, fn) {el.attachEvent('on' + type, fn);}}addEvent(type, el, fn)}

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

Каррирование функций


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

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

Какая от этого польза?

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

Рассмотрим простую функцию, складывающую передаваемые ей числа. Назовём её add. Она принимает три операнда в виде аргументов и возвращает их сумму:

function add(a,b,c){return a + b + c;}

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

add(1,2,3) --> 6add(1,2) --> NaNadd(1,2,3,4) --> 6 //Дополнительный параметр игнорируется.

Как каррировать такую функцию?

Вот код функции curry, которая предназначена для каррирования других функций:

function curry(fn) {if (fn.length <= 1) return fn;const generator = (...args) => {if (fn.length === args.length) {return fn(...args)} else {return (...args2) => {return generator(...args, ...args2)}}}return generator}

Вот результаты экспериментов с этой функцией в браузерной консоли.


Эксперименты с функцией curry в консоли браузера

Композиция функций


Предположим, надо написать функцию, которая, принимая на вход, например, строку bitfish, возвращает строку HELLO, BITFISH.

Как видно, эта функция выполняет две задачи:

  • Конкатенация строк.
  • Преобразование символов результирующей строки к верхнему регистру.

Вот как может выглядеть код такой функции:

let toUpperCase = function(x) { return x.toUpperCase(); };let hello = function(x) { return 'HELLO, ' + x; };let greet = function(x){return hello(toUpperCase(x));};

Поэкспериментируем с ней.


Испытание функции в консоли браузера

Эта задача включает в себя две подзадачи, оформленные в виде отдельных функций. В результате код функции greet получился достаточно простым. Если бы нужно было выполнить больше операций над строками, то функция greet содержала бы в себе конструкцию наподобие fn3(fn2(fn1(fn0(x)))).

Упростим решение задачи и напишем функцию, которая выполняет композицию других функций. Назовём её compose. Вот её код:

let compose = function(f,g) {return function(x) {return f(g(x));};};

Теперь функцию greet можно создать, прибегнув к помощи функции compose:

let greet = compose(hello, toUpperCase);greet('kevin');

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

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

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

function compose() {var args = arguments;var start = args.length - 1;return function() {var i = start;var result = args[start].apply(this, arguments);while (i--) result = args[i].call(this, result);return result;};};

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

Применяете ли вы в своих JavaScript-проектах какие-то особенные способы работы с функциями?



Подробнее..

Как я собирал статистику по брутфорсу наших серверов и лечил их

21.09.2020 14:20:44 | Автор: admin

Мы разместили 5 ханипотов, в дальнейшем просто серверов, чтобы собрать статистику по брутфорсу RDP в наших сетях.

Один сервер находился в Лондоне, другой в Цюрихе, один в защищенной сети в M9, два других в дата-центре Rucloud в защищенной и незащищенной сетях. IP адреса каждого из серверов находятся в разных подсетях, каждый IP адрес отличается первым октетом. Если попытаться измерить расстояние скана между IP адресами по формуле:

((Первый октет подсети 1) (Первый октет подсети 2)) * (2^24),

Если сканировать 0.0.0.0/0, атакующему придется пролистать как минимум 771751936 IP адресов, чтобы найти два самых ближайших друг к другу сервера. Вдобавок, каждый из серверов не отвечал на ICMP и каждый IP адрес не использовался никем в течение 3 месяцев, все 5 серверов открыли порты в одно и то же время. Все серверы были подключены к AD.

Разноцветные графики


Начинаем с интересного и заканчиваем значительным.



Начало было хорошим. Первый брутфорсер сел на сервер в Rucloud в первый же час, как порт был открыт. На всех остальных дата-центрах сервер был обнаружен только на второй час.

Как видно на графиках, сила перебора не сильно менялась изо дня в день. А если посмотреть по времени суток? Вот графики. Разные цвета это разные сутки.


График по времени суток дц ZUR1.


График по времени суток в защищенной подсети M9.


График по времени суток в дц LD8.


График по времени суток в защищенной подсети Rucloud.


График по времени суток в Rucloud.

Достаточно скучная картина, можно сказать, что картина не меняется в зависимости от времени суток.

Посмотрим на эти же графики по времени суток, но уже суммарно по всем дата-центрам.


График по времени суток с накоплением.


График по времени суток.

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


Статистика неудачных попыток входа по каждому адресу по одной незащищенной подсети Rucloud.

Всего, в переборе за целую неделю на одной из незащищенных подсетей Rucloud поучаствовали 89 IP адресов. 10 IP адресов набили 50% из 114809 попыток.


Статистика неудачных попыток входа по каждому адресу по всем дата-центрам.

Этот же самый блин, но только со статистикой по всем дата-центрам. 50% всей статистики набили 15 IP адресов. Попыток по всем пяти серверам было более полумиллиона. А насколько разными были атакующие?



По всем сетям было замечено 143 IP адресов и лишь 29 IP адресов было замечено на всех 5 серверах. Меньше половины из всех атакующих брутили 2 или более сервера. Значит, расстояние сканирования между IP адресами имеет значение. Значит, данные об открытых портах атакующие получали с помощью nmap, сканируя IP адреса один за другим.

Считаем ботнеты


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

Предположим, что это все разные ботнеты с разными словарями, тогда, я насчитал N ботнетов. Вот словари каждого из них:

admin, administrator, administrador, administrateur, admin, administrator, administrador, administrateur, ADMIN, USER, USER1, TEST, TEST1, ADMINISTRATOR, USER1, USER2, USER3, USER4, USER5, USER6, USER7, USER8, USER9, HP, ADMIN, USER, PC, DENTAL

Этот ботнет был самым большим и использовал самый большой словарь. Там встречались много логинов на разных языках, в т.ч. русский, французский и английский:

1, 12, 123, 1234, 12345, 13, 14, 15, 19, 1C, CAMERA, СAMERA, ADMIN, USERL8, GVC, ADMINISTRATEUR, IPAD3, USR_TERMINAL, JEREMY, ADMINISTRATOR, ADM, ALYSSA, ADMINISTRATOR, ATELIER, CAMERA, СAMERA, ADMIN, USERL8, GVC, ADMINISTRATEUR, USR_TERMINAL, JEREMY, IPAD3, USR_TERMINAL, JEREMY, ADMINISTRATOR, ADMIN, ADM, SERGEY, OLEG, IRINA, NATASHA, SYSTEM, SERVICE, GVC, ADMINISTRATEUR, IPAD3, USR_TERMINAL, JEREMY, ADMINISTRATOR, ADMIN, ADM, SERGEY, OLEG, IRINA, NATASHA и так далее, включая даже китайские логины.

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

SHENZHEN, TIANJIN, MANDARIN, CHONGQING, SHENYANG, XIAN, CONS, CHINA, TECHNOLOGY, ISPADMIN, BEIJING, SHANGHAI

Так же были единичные IP адреса пытающиеся перебирать эти логины. Вероятно, просто дети играются:

USR1CV8, ADMINISTRATOR
ADMI, NIMDA, ADMS, ADMINS

Бывает просто тупой перебор паролей, перебор паролей по словарю, а есть более-менее интересный перебор. У атакующих есть возможность получить имена пользователей, SMB шар, иногда даже хэши паролей, имена компьютеров, имя домена AD или WorkGroup.

Специалисты по ИБ знают о BloodHound, о ней знаю и хакеры. Если мы оставим AD в дефолтном её состоянии, то можно похитить имя домена, имя компьютера, даже хэши паролей юзеров. На хабре уже писали о векторах атаки на AD и об этой тулзе. Я рекоменду к прочтению этот блестящий материал.

Кстати, первая атака с применением имени сервера и домена началась через 13 часов после открытия портов, но взломщик быстро отстал, попытавшись ворваться всего 138 раз. Вторая такая атака с этим же словарем повторилась через 3 дня, но тоже долго не продлилась.

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

А это проблема?


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

Подозрения на инфраструктуру быстро исчезли, когда наши немногочисленные клиенты на Windows Server 2008, те не могли зайти на RDP в принципе. Посмотрев в журнал безопасности, мы фиксировали рекордные показатели атак, более 36 тысяч попыток за 24 часа.

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

Генез проблемы до конца неясен. Либо RDP кладется всей сворой, либо каким-то одним атакующим. Воспроизвести дисконнекты и зависание картинки с помощью скрипта и mstsc.exe не удалось.

То ли брутфорс превращается в DDoS, толи у какого-то из атакующих как-то по-особому реализована брутилка, что вызывает и проблемы. Единственное что ясно, что время разрыва соединение совпадает с неудачными попытками входа в систему.

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


Источник: Kaspersky

Решение?


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

Модули работают на Windows Powershell 5.1 и Powershell Core 7. Ссылка на гитхаб проекта находится тут. Теперь взглянем на функции.

Protect-Bruteforce


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



Unprotect-Bruteforce


Сбрасывает RemoteAddress для дефолтных правил брандмауэра.



Stop-Bruteforce


Просматривает журнал событий на предмет неудачных входов и блокирует IP адреса из списка отдельным правилом Stop-Bruteforce.



Get-Bruteforce


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



Опрос


Мы в RUVDS считаем, что операционная система должна доставляться пользователю в предельно неизмененном состоянии. Мы думаем, что в идеальном мире, операционная система должна предоставляться так, какой она была в своем стоковом состоянии при первом запуске. Но ведь функции, такие как генерация паролей из ЛК, не только упрощают жизнь, просто необходимы многим нашим клиентам. Хотим знать ваше мнение о подобного рода quality of life штуках. Голосуйте и комментируйте.




Подробнее..

Перевод Введение в React, которого нам не хватало

21.09.2020 16:09:27 | Автор: admin
React это самая популярная в мире JavaScript-библиотека. Но эта библиотека не потому хороша, что популярна, а потому популярна, что хороша. Большинство существующих вводных руководств по React начинается с примеров того, как пользоваться этой библиотекой. Но эти руководства ничего не говорят о том, почему стоит выбрать именно React.

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



Этот материал (вот, если интересно, его видеоверсия) написан для тех, кто хочет найти ответ на следующие вопросы: Почему React? Почему React работает именно так? С какой целью API React устроены так, как устроены?.

Почему React?


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

Когда появилась библиотека React это на фундаментальном уровне изменило то, как работают JavaScript-фреймворки и библиотеки. В то время как другие подобные проекты продвигали идеи MVC, MVVM и прочие подобные, в React был выбран другой подход. А именно, тут рендеринг визуальной составляющей приложения был изолирован от представления модели. Благодаря React во фронтенд-экосистеме JavaScript появилась совершенно новая архитектура Flux.

Почему команда разработчиков React поступила именно так? Почему такой подход лучше тех, что появились раньше него, вроде архитектуры MVC и спагетти-кода, который пишут на jQuery? Если вы из тех, кого интересуют эти вопросы, можете посмотреть это выступление 2013 года, посвящённое разработке JavaScript-приложений в Facebook.

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

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

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

Отсутствие детерминизма = параллельные вычисления + мутабельное состояние.

Мартин Одерски


Главной задачей команды разработки React было решение этой проблемы. Они с ней справились, применив два основных инновационных подхода:

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

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

Том Оччино, JSConfUS 2013


Библиотека React смогла серьёзно снизить остроту проблемы неконтролируемых мутаций благодаря использованию архитектуры Flux. Вместо того чтобы присоединять к произвольному количеству произвольных объектов (моделей) обработчики событий, вызывающие обновления DOM, библиотека React дала разработчикам единственный способ управления состоянием компонента. Это диспетчеризация действий, влияющих на хранилище данных. Когда меняется состояние хранилища, система предлагает компоненту перерендериться.


Архитектура Flux

Когда мне задают вопрос о том, почему стоит обратить внимание на React, я даю простой ответ: Дело в том, что нам нужен детерминированный рендеринг представлений, а React значительно упрощает решение этой задачи.

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

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

JSX


JSX это расширение JavaScript, позволяющее декларативно создавать компоненты пользовательского интерфейса. JSX обладает следующими заметными возможностями:

  • Применение простой декларативной разметки.
  • Код разметки расположен там же, где и код компонента.
  • Реализация принципа разделения ответственностей (например отделение описания интерфейса от логики состояния и от побочных эффектов). Причём, реализация, основанная не на использовании различных технологий (например HTML, CSS, JavaScript).
  • Абстрагирование управления изменениями DOM.
  • Абстрагирование от особенностей различных платформ, для которых создают React-приложения. Дело в том, что благодаря использованию React можно создавать приложения, предназначенные для множества платформ (речь идёт, например, о разработке для мобильных устройств с использованием React Native, о приложениях для систем виртуальной реальности, о разработке для Netflix Gibbon, о создании Canvas/WebGL-интерфейсов, о проекте react-html-email).

Если, до появления JSX, нужно было декларативно описывать интерфейсы, то нельзя было обойтись без использования HTML-шаблонов. В те времена не было общепризнанного стандарта по созданию таких шаблонов. Каждый фреймворк использовал собственный синтаксис. Этот синтаксис приходилось изучать тому, кому, например, нужно было пройтись в цикле по неким данным, встроить в текстовый шаблон значения из переменных или принять решение о том, какой компонент интерфейса выводить, а какой нет.

В наши дни, если взглянуть на разные фронтенд-инструменты, окажется, что без специального синтаксиса, вроде директивы *ngFor из Angular, тоже не обойтись. Но, так как JSX можно назвать надмножеством JavaScript, создавая JSX-разметку можно пользоваться существующими возможностями JS.

Например, перебрать некий набор элементов можно, воспользовавшись методом Array.prototype.map. Можно использовать логические операторы, организовывать условный рендеринг с помощью тернарного оператора. Можно пользоваться чистыми функциями, можно конструировать строки с использованием шаблонных литералов. В общем-то, тому, кто описывает интерфейсы средствами JSX, доступны все возможности JavaScript. Полагаю, что в этом заключается огромное преимущество React перед другими фреймворками и библиотеками.

Вот пример JSX-кода:

const ItemList = ({ items }) => (<ul>{items.map((item) => (<li key={item.id}><div>{item.name}</div></li>))}</ul>);

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

  • Тут используется подход к именованию атрибутов элементов, отличающийся от того, который принят в HTML. Например, class превращается в className. Речь идёт о применении стиля именования camelCase.
  • У каждого элемента списка, который нужно вывести, должен быть постоянный уникальный идентификатор, предназначенный для использования в JSX-атрибуте key. Значение идентификатора должно оставаться неизменным в ходе различных манипуляций с элементами списка. На практике большинство элементов списков в моделях данных имеют уникальные id, эти идентификаторы обычно отлично показывают себя в роли значений для key.

React не навязывает разработчику единственно правильный способ работы с CSS. Например, компоненту можно передать JavaScript-объект со стилями, записав его в свойство style. При таком подходе большинство привычных имён стилей будет заменено на их эквиваленты, записанные по правилам camelCase. Но этим возможности по работе со стилями не ограничиваются. На практике я одновременно пользуюсь разными подходами к стилизации React-приложений. Выбор конкретного подхода зависит от того, что именно нужно стилизовать. Например, глобальные стили я применяю для оформления тем приложений и макетов страниц, а локальные стили для настройки внешнего вида конкретного компонента.

Вот мои любимые возможности React, касающиеся работы со стилями:

  • CSS-файлы, которые можно загружать в заголовочной части страницы. Они могут использоваться для настройки макетов страниц, шрифтов и прочих подобных элементов. Это надёжный, работоспособный механизм стилизации.
  • CSS-модули это CSS-файлы область применения которых ограничена локальной областью видимости. Их можно импортировать непосредственно в JavaScript-файлы. Для того чтобы применять CSS-модули, нужно воспользоваться правильно настроенным загрузчиком модулей. В Next.js, например, этот механизм активирован по умолчанию.
  • Пакет styled-jsx, который позволяет объявлять стили прямо в коде React-компонентов. Это напоминает использование тега <style> в HTML. Область видимости таких стилей можно назвать гиперлокальной. Речь идёт о том, что стили воздействуют только на элементы, к которым они применяются, и на их дочерние элементы. При применении Next.js пакетом styled-jsx можно пользоваться без необходимости самостоятельно что-то подключать и настраивать.

Синтетические события


React даёт в наше распоряжение кроссбраузерную обёртку SyntheticEvents, представляющую синтетические события и предназначенную для унификации работы с событиями DOM. Синтетические события весьма полезны по нескольким причинам:

  1. Они позволяет унифицировать особенности различных платформ, связанные с обработкой событий. Это упрощает разработку кроссбраузерных приложений.
  2. Они автоматически решают задачи по управлению памятью. Если вы, например, собираетесь создать некий список с бесконечной прокруткой, пользуясь лишь чистыми JavaScript и HTML, то вам придётся делегировать события или подключать и отключать обработчики событий по мере появления и скрытия элементов списка. Всё это нужно будет делать для того чтобы избежать утечек памяти. Синтетические события автоматически делегируются корневому узлу, что приводит к тому, что React-разработчикам не приходится решать задачи по управлению памятью.
  3. В их работе используются пулы объектов. Механизмы поддержки синтетических событий способны генерировать тысячи объектов в секунду и организовывать высокопроизводительную работу с такими объектами. Если решать подобные задачи, каждый раз создавая новые объекты, это приведёт к частой потребности в вызове сборщика мусора. А это, в свою очередь, может привести к замедлению программы, к видимым задержкам в работе пользовательского интерфейса и анимаций. Объекты синтетических событий создаются заранее и помещаются в пул объектов. Когда надобности в событии нет, оно возвращается обратно в пул. В результате разработчик может не беспокоиться о том, что сборщик мусора заблокирует главный поток JavaScript, очищая память от ставших ненужными объектов.

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

Жизненный цикл компонента


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

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

В React, начиная с версии 0.14, появился синтаксис описаний компонентов, основанных на классах, позволяющий обрабатывать события жизненного цикла компонентов. В жизненном цикле React-компонентов можно выделить три важнейших этапа: Mount (монтирование), Update (обновление) и Unmount (размонтирование).


Жизненный цикл компонента

Этап Update можно разделить на три части: Render (рендеринг), Precommit (подготовка к внесению изменений в дерево DOM), Commit (внесение изменений в дерево DOM).


Структура этапа Update

Остановимся на этих этапах жизненного цикла компонента подробнее:

  • Render на этом этапе жизненного цикла компонента производится его рендеринг. Метод компонента render() должен представлять собой детерминированную функцию, не имеющую побочных эффектов. Эту функцию стоит рассматривать как чистую функцию, получающую данные из входных параметров компонента и возвращающую JSX.
  • Precommit на этом этапе можно прочитать данные из DOM, пользуясь методом жизненного цикла компонента getSnapShotBeforeUpdate. Это может оказаться очень кстати, например, если перед повторным рендерингом компонента нужно узнать нечто вроде позиции скроллинга или размеров визуализированного элемента.
  • Commit на этой фазе жизненного цикла компонента React обновляет DOM и рефы. Здесь можно воспользоваться методом componentDidUpdate или хуком useEffect. Именно здесь можно выполнять эффекты, планировать обновления, использовать DOM и решать другие подобные задачи.

Дэн Абрамов подготовил отличную схему, которая иллюстрирует особенности работы механизмов жизненного цикла компонентов.


Жизненный цикл React-компонентов

Я полагаю, что представление компонентов в виде долгоживущих классов это не самая лучшая ментальная модель React. Помните о том, что состояние React-компонентов не должно мутировать. Устаревшее состояние должно заменяться на новое. Каждая такая замена вызывает повторный рендеринг компонента. Это даёт React его, пожалуй, самую главную и самую ценную возможность: поддержку детерминированного подхода к созданию визуальных представлений компонентов.

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

Другими словами, большинство React-компонентов имеет смысл представлять себе в виде чистых функций, получающих входные параметры и возвращающих JSX. Чистые функции обладают следующими особенностями:

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

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

Хуки React


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

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

Хук useEffect позволяет ставить побочные эффекты в очередь для их последующего выполнения. Они будут вызываться в подходящее время жизненного цикла компонента. Это время может настать сразу после монтирования компонента (например при вызове метода жизненного цикла componentDidMount), во время фазы Commit (метод componentDidUpdate), непосредственно перед размонтированием компонента (componentWillUnmount).

Обратили внимание на то, что с одним хуком связано целых три метода жизненного цикла компонента? Дело тут в том, что хуки позволяют объединять связанную логику, а не раскладывать её, как было до них, по разным методам жизненного цикла компонента.

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

Вот что дают нам хуки React:

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

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

Компоненты-контейнеры и презентационные компоненты


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

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

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

Презентационные компоненты


Рассмотрим особенности презентационных компонентов:

  • Они не взаимодействуют с сетевыми ресурсами.
  • Они не сохраняют данные в localStorage и не загружают их оттуда.
  • Они не выдают неких непредсказуемых данных.
  • Они не обращаются напрямую к текущему системному времени (например, путём вызова метода Date.now()).
  • Они не взаимодействуют напрямую с хранилищем состояния приложения.
  • Они могут использовать локальное состояние компонента для хранения чего-то наподобие данных, введённых в формы, но при этом они должны поддерживать возможность приёма таких данных и задания на их основе своего исходного состояния, что облегчает их тестирование.

Именно из-за последнего пункта этого списка я, говоря о презентационных компонентах, упомянул о том, что это, по большей части, чистые компоненты. Эти компоненты считывают своё состояние из глобального состояния React. Поэтому хуки вроде useState и useReducer дают в их распоряжение неявным образом определённые данные (то есть данные, не описанные в сигнатуре функции), что, с технической точки зрения, не позволяет назвать такие компоненты чистыми. Если нужно, чтобы они были бы по-настоящему чистыми, можно делегировать все задачи по управлению состоянием компоненту-контейнеру, но я полагаю, что делать этого не стоит, по крайней мере, до тех пор, пока правильность работы компонента можно проверить с помощью модульных тестов.

Лучшее враг хорошего.

Вольтер


Компоненты-контейнеры


Компоненты-контейнеры это такие компоненты, которые отвечают за управление состоянием, за выполнение операций ввода-вывода и за решение любых других задач, которые можно отнести к побочным эффектам. Они не должны самостоятельно рендерить некую разметку. Вместо этого они делегируют задачу рендеринга презентационным компонентам, а сами служат обёрткой для таких компонентов. Обычно компонент-контейнер в React+Redux-приложении просто вызывает mapStateToProps() и mapDispatchToProps(), после чего передаёт соответствующие данные презентационным компонентам. Контейнеры, кроме того, могут использоваться для решения некоторых задач общего характера, о которых мы поговорим ниже.

Компоненты высшего порядка


Компонент высшего порядка (Higher Order Component, HOC) это компонент, который принимает другие компоненты и возвращает новый компонент, реализующий новый функционал, основанный на исходных компонентах.

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

В отличие от хуков React и от механизма render props, компоненты высшего порядка поддаются композиции с использованием стандартного подхода к композиции функций. Это позволяет декларативно описывать результаты композиции возможностей, предназначенных для использования в разных местах приложения. При этом готовые компоненты не должны знать о существовании тех или иных возможностей. Вот пример HOC с EricElliottJS.com:

import { compose } from 'lodash/fp';import withFeatures from './with-features';import withEnv from './with-env';import withLoader from './with-loader';import withCoupon from './with-coupon';import withLayout from './with-layout';import withAuth from './with-auth';import { withRouter } from 'next/router';import withMagicLink from '../features/ethereum-authentication/with-magic-link';export default compose(withEnv,withAuth,withLoader,withLayout({ showFooter: true }),withFeatures,withRouter,withCoupon,withMagicLink,);

Тут показана смесь множества возможностей, совместно используемых всеми страницами сайта. А именно, withEnv читает настройки из переменных окружения, withAuth реализует механизм GitHub-аутентификации, withLoader показывает анимацию во время загрузки данных пользователя, withLayout({ showFooter: true }) выводит стандартный макет с подвалом, withFeature показывает настройки, withRouter загружает маршрутизатор, withCoupon отвечает за работу с купонами, а withMagicLing поддерживает аутентификацию пользователей без пароля с использованием Magic.

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

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

import LessonPage from '../features/lesson-pages/lesson-page.js';import pageHOC from '../hocs/page-hoc.js';export default pageHOC(LessonPage);

У подобных компонентов высшего порядка есть альтернатива, но она представляет собой сомнительную конструкцию, называемую pyramid of doom (пирамида погибели) и ей лучше не пользоваться. Вот как это выглядит:

import FeatureProvider from '../providers/feature-provider';import EnvProvider from '../providers/env-provider';import LoaderProvider from '../providers/loader-provider';import CouponProvider from '../providers/coupon-provider';import LayoutProvider from '../providers/layout-provider';import AuthProvider from '../providers/auth-provider';import RouterProvider from '../providers/RouterProvider';import MagicLinkProvider from '../providers/magic-link-provider';import PageComponent from './page-container';const WrappedComponent = (...props) => (<EnvProvider { ...props }><AuthProvider><LoaderProvider><LayoutProvider showFooter={ true }><FeatureProvider><RouterProvider><CouponProvider><MagicLinkProvider><YourPageComponent /></MagicLinkProvider></CouponProvider></RouterProvider></FeatureProvider></LayoutProvider></LoaderProvider></AuthProvider></EnvProvider>);

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

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

Итоги


  • Почему React? React даёт нам детерминированный рендеринг визуальных представлений компонентов, в основе которого лежит однонаправленная привязка данных и иммутабельное состояние компонентов.
  • JSX даёт нам возможность простого декларативного описания интерфейсов в JavaScript-коде.
  • Синтетические события сглаживают кросс-платформенные различия систем обработки событий и облегчают управление памятью.
  • Концепция жизненного цикла компонентов направлена на защиту состояния компонентов. Жизненный цикл компонента состоит из фаз монтирования, обновления и размонтирования. Фаза обновления состоит из фазы рендеринга, фазы подготовки к внесению изменений в DOM и фазы внесения изменений в DOM.
  • Хуки React позволяют подключаться к методам жизненного цикла компонентов без использования синтаксиса, основанного на классах. Применение хуков, кроме того, облегчает совместное использование одного и того же кода в разных компонентах.
  • Компоненты-контейнеры и презентационные компоненты позволяют отделить задачи формирования визуального представления интерфейсов от задач по управлению состоянием приложения и от побочных эффектов. Это улучшает возможности по многократному использованию и тестированию компонентов и бизнес-логики приложения.
  • Компоненты высшего порядка упрощают совместное использование возможностей, представляющих собой композицию других возможностей. При этом компонентам не нужно знать об этих возможностях (и не нужно, чтобы компоненты были бы тесно связаны с ними).

Что дальше?


В этом материале о React мы затронули множество концепций функционального программирования. Если вы стремитесь к глубокому пониманию принципов разработки React-приложений, вам полезно будет освежить свои знания о чистых функциях, об иммутабельности, о каррировании и частичном применении функций, о композиции функций. Соответствующие материалы вы можете найти на EricElliottJS.com.

Я рекомендую использовать React совместно с Redux, Redux-Saga и RITEway. Redux рекомендуется использовать совместно с Autodux и Immer. Для организации сложных схем работы с состоянием можно попробовать воспользоваться Redux-DSM.

Когда вы разберётесь с основами и будете готовы к созданию реальных React-приложений, обратите внимание на Next.js и Vercel. Эти инструменты помогут автоматизировать настройку системы сборки проекта и CI/CD-конвейера, с их помощью можно подготовить проект к оптимизированному развёртыванию на сервере. Они дают тот же эффект, что и целая команда DevOps-специалистов, но пользоваться ими можно совершенно бесплатно.

Какие вспомогательные инструменты вы применяете при разработке React-приложений?



Подробнее..

Повесть о трекболах

22.09.2020 12:22:19 | Автор: admin

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

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

Что же такое трекбол?


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

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

Есть, конечно, типичные и очевидные отличия трекболов, например, по способу считывания перемещения шара: это оптико-механическая система и либо только оптическая; по способу подключения к компьютеру: интерфейс USB, ps/2, COM-порт и т.п. Однако, на самом деле это несущественные отличия, так как большой разницы не будет при использовании трекболов с разным интерфейсом. Тем более, что современные трекболы имеют интерфейс только USB и они все, без исключения, оптические. Главным же конструктивным отличием является то, каким органом мы вращаем шар (гусары, молчать): одним большим пальцем, либо указательным, безымянным и средним пальцем одновременно.

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

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

Мой первый трекбол


Моё знакомство с трекболами началось с манипулятора The Microsoft Ballpoint mouse (его фото представлено на КДПВ). Его особенность в том, что он крепился специальным зажимом к клавиатуре или ноутбуку, и позволял весьма комфортно работать с ним левой или правой рукой. Для этих целей на этой модели кнопки были продублированы с обеих сторон.


Картинка с коробки от трекбола.

Мне он достался новенький, в коробочке, с проводами. К нему шла толстенная книжка с инструкцией по эксплуатации, провод для СОМ-порта и ps/2, крепление к клавиатуре и сам трекбол. Кстати, трекбол легко отстёгивался от крепления и мог использоваться просто в руке, что на тот момент было очень даже круто, да что говорить, мне и сегодня очень не хватает такого вот манипулятора!

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

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

Сегодня, для статьи искал фотографии этого трекбола, и он оказался весьма редким зверем, фотографии удалось найти с большим трудом. Особенно, если ты не помнишь название модели. Конкретно эта модель появилась ещё в доинтернетную эпоху. Фотографии в статье взяты с сайта Microsoft.

Трекбол в ноутбуке


Вторым моим трекболом был манипулятор, встроенный в ноутбук Compaq Contura 410C. Этот ноутбук, на удивление, жив до сих пор, разве что где-то утрачен в годах его блок питания.


Трекбол в Compaq Contura 410C.

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

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

Главная моя рабочая лошадка


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


Logitech TrackMan Wheel Optical.

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

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

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


Скриншот окончания дуэли в CTF на карте q3ctf4 (E+ мод, конфиг madsod), красным выделена статистика, В реальном бою, на конфиге madsod 30% из рельсы это был очень хороший показатель, с учётом безумной динамики игры. Увы, после этого конфига, все остальные игры мне кажутся забегами черепах и играть в них не могу.

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



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


У меня было 4 версии этого типа трекбола, беспроводная версия, лазерная версия. К сожалению, фотографий всех версий этих устройств у меня не сохранилось.


Очередной новый трекбол.

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

Последним трекболом такого формфактора был шикарный Logitech M570. Он был идеальным.


Logitech M570.

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

Заболевание фанатичных трекболистов


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


Места болей.

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


Заключение (подчёркнуто): выраженные признаки артроза.

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

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

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

Другие модели трекболов, которые мне довелось использовать


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

Первый шикарный трекболл был A4 Tech Wintrack PC XT трекбол, на СОМ-порт. Несмотря на то, что он был оптико-механическим, да ещё и на СОМ-порт, он был трёхкнопочным. И если бы сейчас у него было бы колесо прокрутки, то я бы до сих пор его использовал, ибо нахожу его весьма удобным и интересным.


A4 Tech Wintrack PC XT.

Устройство реально здоровенное, но очень прикольное, особенно доставляют огромные клавиши. К сожалению, у меня не прижился, так как СОМ-порт в современных компьютерах сегодня днём с огнём не сыщешь, а переходник это такой себе метод, так как нужны дополнительные драйвера и прочие проблемы. Даже стало любопытно, а может ли современная Windows 10 работать с СОМ-портовыми мышами?

Другая модель, которая находилась у меня в пользовании некоторое время это Logitech TrackMan Marble Silver.


Logitech TrackMan Marble Silver.

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

Крайний трекбол, и самый необычный, которым я пользовался совсем недавно, был Logitech Cordless TrackMan Optical Trackball. Данную модель очень выгодно купил на одной интернет площадке несколько месяцев назад.


Logitech Cordless TrackMan Optical Trackball.

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


Большая клавиша сбоку это ЛКМ.

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


Большая клавиша сбоку это ЛКМ.

Поэтому манипулятор пошёл дальше по рукам.

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

Что же в итоге?


К моему большому сожалению, из-за травмы не могу использовать больше трекболы под большой палец под правую руку. Да, и как говорят мои знакомые любители трекболов, которые используют их около 5-10 лет, что у них так же наблюдаются признаки артроза (ноют суставы большого пальца). Поэтому на данный момент я использую манипулятор типа мышь. Но, всё же поглядываю на интересные модели. Пример таких моделей, это трекбол под большой палец для левой руки ELECOM М-XT4DRBK.


ELECOM М-XT4DRBK

Либо другая модель, которая своей красотой мне не даёт покоя это Microsoft Explorer 1.0.


Microsoft Explorer 1.0

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

Из самых интересных и редких моделей трекболов, которые мне было бы интересно пощупать это CST Laser Trackball.


CST Laser Trackball (фото отсюда)

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



Подробнее..

Перевод Выработка уникальных идей для Data Science-проектов за 5 шагов

22.09.2020 16:11:47 | Автор: admin
Вероятно, самое сложное в любом Data Science-проекте это придумать оригинальную, но реализуемую идею. Специалист, который ищет такую идею, легко может попасться в ловушку наборов данных. Он тратит многие часы, просматривая существующие наборы данных и пытаясь выйти на новые интересные идеи. Но у такого подхода есть одна проблема. Дело в том, что тот, кто смотрит лишь на существующие наборы данных (c Kaggle, Google Datasets, FiveThirtyEight), ограничивает свою креативность, видя лишь небольшой набор задач, на которые ориентированы изучаемые им наборы данных.

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



Как вырабатывать новые идеи? Для того чтобы найти ответ на этот вопрос, я совместила собственный опыт и результаты исследований креативности. Это привело к тому, что мне удалось сформировать 5 вопросов, ответы на которые помогают находить новые идеи. Тут же я приведу и примеры идей, найденных благодаря предложенной мной методике. В процессе поиска ответов на представленные здесь вопросы вы пройдёте по пути создания новых идей и сможете задействовать свои креативные возможности на полную мощность. В результате у вас будут новые уникальные идеи, которые вы сможете реализовать в ваших Data Science-проектах.

1. Почему я хочу начать работу над новым проектом?


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

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

2. К каким сферам относятся мои интересы и мой опыт?


Подумать над этим вопросом стоит по трём основным причинам.

  • Во-первых, вспомните о диаграммах Венна, используемых в науке о данных для описания навыков, необходимых в этой области. Знания в конкретной области это важный актив, которым должен обладать каждый дата-сайентист. Решать некие задачи, обрабатывая данные, можно только в том случае, если понятна предметная область, к которой относятся эти данные. В противном случае будут применяться алгоритмы, будут создаваться визуализации и прогнозы, которые покажутся неадекватными любому практикующему специалисту соответствующего профиля. А если то, что вы делаете, не имеет смысла, то зачем вообще этим заниматься?
  • Во-вторых, важно, чтобы вам была интересна идея проекта, чтобы вам был бы интересен тот набор данных, с которым вы работаете. Вам вряд ли захочется заставлять себя тратить свободное время на проект, который вам безразличен. Если вам интересна некая сфера знаний, то вам необязательно быть в ней экспертом. Но вы должны быть готовы к тому, чтобы вложить время в дополнительные исследования и в разбор проблем, стоящих за данными.
  • В-третьих, учитывайте то, что исследователи выявили тот факт, что введение ограничений в креативный процесс приводит к улучшению получаемых результатов. Это означает, что сосредоточение на конкретной предметной области или на комбинации из нескольких областей позволит добиться лучших результатов, чем попытки поиска идеи без каких-либо ограничений.

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

3. Как найти вдохновение?


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

  • Новости, авторские статьи, публикации в блогах. Чтение о неких событиях или явлениях, которые наблюдали авторы публикаций, это отличный способ выработки идей. Например, портал WIRED опубликовал эту статью, посвящённую тому, что функция автодополнения ввода при поиске в Google демонстрирует политическую предвзятость. Вдохновившись этой идеей, можно исследовать систематические ошибки в языковых моделях. Или можно задаться вопросом о возможности предсказания географического положения человека на основе поисковых запросов, вводимых им в Google.
  • Научная литература. Научные публикации часто включают в себя рассказы о нерешённых вопросах, имеющих отношение к исследуемой теме. Например, в этой публикации рассказывается о языковой модели GPT-2 и упоминается о том, что эта модель, без её тонкой настройки, показывает себя на определённых задачах, вроде ответов на вопросы, не лучше, чем попытка решить эти задачи методом случайного угадывания. Почему бы не написать что-нибудь о нюансах тонкой настройки этой модели?
  • Материалы из сферы науки о данных. Чтение материалов, представляющих темы, связанные с Data Science, и содержащие обзоры соответствующих проектов, способно привести к новым идеям. Например, когда я прочитала об NLP-исследовании сериала Офис, я тут же пожалела о том, что мне эта идея не пришла раньше, чем автору материала. Но почему бы не исследовать какой-нибудь другой сериал? А может, изучить несколько фильмов и попытаться определить языковые паттерны? А для написания текстов к любимому сериалу можно попробовать воспользоваться моделью GPT-2.

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

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

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

4. Где найти подходящие данные?


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

  • Существующие хранилища данных: Kaggle, Google Datasets, FiveThirtyEight, BuzzFeed, AWS, UCI Machine Learning Repository, data.world, Data.gov и многие другие, которые можно найти с помощью Google.
  • Источники данных, используемые другими дата-сайентистами. Поищите сведения по интересующей вас теме в Google и в Google Scholar. Выясните, пытался ли уже кто-нибудь найти ответ на вопрос, похожий на ваш. Какие данные использовались в похожих исследованиях? Например, ресурс Our World in Data представляет академические и неакадемические источники данных, о которых вы можете не знать.
  • Данные, которые нужно собирать самостоятельно. Для сбора таких данных можно прибегнуть к веб-скрапингу, к анализу текстов, к различным API, к отслеживанию событий, к работе с лог-файлами.

Если вам не удаётся отыскать данные, которые могут вам помочь в реализации идеи вашего проекта, переформулируйте идею. Попытайтесь извлечь из исходной идеи такую идею, которую можно реализовать, пользуясь имеющимися у вас данными. А между тем задайте себе вопрос о том, почему вам не удаётся найти нужные вам данные. Что не так в той области, которой вы интересуетесь? Что можно с этим сделать? Уже одни только ответы на эти вопросы могут привести к появлению нового Data Science-проекта.

5. Реализуема ли найденная идея?


Итак, у вас есть фантастическая идея! Но можно ли её реализовать? Снова пройдитесь по этапам процесса генерирования идей. Подумайте о том, чего вы хотите достичь (вопрос 1), интересна ли вам выбранная область, если ли у вас опыт работы в ней (вопрос 2), есть ли у вас данные, необходимые для реализации идеи (вопрос 4). Теперь вам нужно определить следующее: имеются ли у вас навыки, необходимые для реализации идеи и для достижения цели.

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

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

Итоги


  • Соотносите свои ожидания с реальностью. Нахождение оригинальной идеи, которую можно реализовать, займёт больше, чем несколько часов. Поиск такой идеи это непрерывный процесс, ведомый вдохновением, когда нужно записывать всё, что приходит в голову. Например можно делать соответствующие заметки в телефоне. Несколько таких вот идей можно, в итоге, скомбинировать и выйти на интересный проект.
  • Обсудите с кем-нибудь вашу идею. Обсуждение идеи вашего проекта может сослужить вам хорошую службу. Возможно, в ходе разговора всплывут какие-то вопросы, которые окажутся интереснее исходной идеи. Возможно, вам дадут подсказку относительно дополнительных источников данных. А может, вам просто нужен хороший слушатель, поделившись с которым своими соображениями, вы сможете понять, стоит ли вам заниматься найденной идеей.
  • Не бойтесь начинать сначала. Что бы вы ни делали, вы всегда узнаёте что-то новое. Каждый раз, когда вы пишете строку кода, вы практикуетесь и расширяете свои знания и навыки. Если вы поняли, что реализация найденной идеи не приблизит вас к вашей цели, или если оказалось, что идея нереализуема, не бойтесь оставить её и двигаться дальше. Время, которое вы потратили на поиски этой идеи, для вас не потеряно. Нужно здраво оценивать те выгоды, которые можно будет получить от реализации идеи.

Я, пользуясь описанной здесь методикой, постоянно нахожу оригинальные идеи для своих Data Science-проектов. Надеюсь, эта методика пригодится и вам.

Как вы ищите новые идеи для своих Data Science-проектов?



Подробнее..

Бесплатная бухгалтерия для одинокого ИП миф или реальность?

23.09.2020 14:17:26 | Автор: admin


Существует множество учетных систем для малого бизнеса, помимо занимающих на российском рынке монопольное положение продуктов 1С. Есть, к примеру, специализированные облачные решения и онлайн-сервисы банков, доступ к которым можно получить вместе с расчетно-кассовым обслуживанием. За все популярные продукты приходится регулярно отдавать довольно приличную сумму денег, что вполне оправдано при наличии наемных сотрудников и довольно сложных бизнес-процессов. В случае, если индивидуальный предприниматель работает сам и применяет упрощенную систему налогообложения, нет никакого смысла отдавать по 5 10 тысяч рублей в год только за право вести бухгалтерский учет и формировать налоговую декларацию. В небольшой статье мы попробуем разобраться, как микробизнес может сэкономить немного микроденег, используя альтернативные программы.

Какие задачи возникают?


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

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

  • Выставление счетов клиентам и ведение первичной бухгалтерской документации (договоры, акты и т.д.);
  • Финансовый учет и взаимодействие с банками (получение выписок и формирование платежных документов);
  • Правильное совмещение различных режимов налогообложения, например, в случае использования патентов;
  • ККМ и работа с кассой, если в бизнесе вращаются наличные деньги и/или принимаются платежи (наличными и по карте) от физических лиц;
  • Движение товаров и склад;
  • Своевременная уплата налогов и взносов за себя с правильным заполнением всех реквизитов в платежных документах;
  • Ведение КУДиР;
  • Формирование и сдача декларации по УСН (раз в год);
  • Сдача форм в Росстат (по требованию).

На первый взгляд, у нашего сферического ИП в вакууме возникает довольно много проблем. На самом деле это не так. Наружу он обычно выдает государству налоги и взносы за себя, а также один единственный документ налоговую декларацию утвержденного формата. На этом налоговая отчетность заканчивается, а из бухгалтерской нашему ИП нужна только книга учета доходов и расходов (КУДиР). Для ведения деятельности предпринимателю достаточно работы с бухгалтерской первичкой, финансового учета и интеграции с банками. Необходимость принимать платежи от физических лиц, вести учет товаров на складе или, скажем, совмещать упрощенку с патентом могут несколько усложнить дело, но разница не принципиальна.

Какую-то отчетность периодически запрашивает Росстат, но на практике это происходит редко: раз в пять лет при сплошном наблюдении, в остальное время ведомство всякой мелочевкой не интересуется. Чтобы не попасть на штрафы, достаточно проверить на сайте необходимость сдавать соответствующие формы (бумажные извещения могут не дойти), скачать бланки, заполнить их в Excel и отправить по инстанциям этот процесс автоматизации не требует. Что касается КУДиР, ее можно вести в электронном виде в любой учетной системе и распечатать только если в налоговой инспекции потребуют бумагу для проверки. Практика показывает, что вероятность этого события стремится к нулю, потому что налоговики мелкими предпринимателями особо не интересуются, пока те отдают государству положенную долю от барышей и не совершают сомнительных операций.

Какие решения предлагает рынок?


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

  • Коробочная версия 1С: Предприятия для малого бизнеса (конфигурация Упрощенка и вот это все). Стоит продукт на первый взгляд недорого, но купить и забыть это не про 1С, потому что на низком старте уже стоит франчайзи с доильным аппаратом в виде договора ИТС. Одинокому ИП он вроде бы не нужен, но иначе не получишь обновлений через портал. За локальную версию 1С платить придется регулярно, смиритесь;
  • Облачная бухгалтерия 1С: ФРЕШ БизнесСтарт или другая конфигурация. Хороший вариант, если у вас есть наемные работники и выделенный (приходящий) бухгалтер, но для одинокого ИП он может оказаться чрезмерным. Из недостатков стоит отметить только необходимость хранить свои данные в чужом облаке и регулярно вносить абонентскую плату, размер которой зависит от набора используемых услуг;
  • Облачная бухгалтерия банка или специализированный бухгалтерский онлайн-сервис. Отдельный сервис закрывает все задачи ИП, но стоит довольно дорого. Предлагаемые банками решения можно получить вместе с расчетно-кассовым обслуживанием, но только на платных тарифах. Как правило возможности бухгалтерии от кредитной организации ограничены, хотя для мелких ИП их будет достаточно. С другой стороны, на рынке появились неплохие бесплатные тарифы на РКО (без бухгалтерии), поэтому отдавать деньги банку за обслуживание счета нет никакой нужды;
  • 1С: ПРЕДПРИЯТИЕ в аренду на виртуальном сервере RuVDS. Этот вариант объединяет преимущества первых двух без их недостатков. Данные будут храниться на VDS клиента, а не в общем облаке. При этом работа пользователей с программой не отличается от локальной, а договор на ИТС для получения обновлений заключать не требуется. Цена довольно демократичная, но если ИП работает сам-один, она может показаться высокой. При наличии наемников, бухгалтеров и сложных бизнес-процессов это лучшее на наш взгляд предложение;
  • Бесплатная версия 1С: Предприятия для iOS/iPadOS и Android. Мобильное приложение решает практически все задачи мелкого ИП, но не умеет интегрироваться с ККМ и системами ЭДО. К тому же учет ведется только на смартфоне или планшете. За продвинутые возможности (включая работу на десктопе через браузер) все равно придется платить, приобретая подписку на облачные решения 1С (все тот же БизнесСтарт);
  • Свободно распространяемые бухгалтерские программы и системы ERP. Сообществу разработчиков СПО похвастать особо нечем. Был когда-то отечественный продукт Ананас, но его поддержка давно прекращена. Иностранные системы сложны в настройке и не учитывают в полной мере специфику российского бухучета.
  • Условно-бесплатные отечественные программные продукты для Windows. Если возможностей мобильной версии 1С: Предприятия вам не хватает, а за настольную или облачную бухгалтерию платить не хочется, стоит остановиться на этом варианте. Учет и отчетность у мелкого одинокого ИП не особенно сложны, поэтому альтернативные продукты заслуживают внимания.

Как сэкономить?


Конкурентов у 1С: Предприятия довольно много. Есть различные системы ERP для крупных компаний, а также простые решения для малого бизнеса. Последние чаще всего условно-бесплатны: покупать придется дополнительные возможности и/или поддержку. Особенно радует, что эти программы можно не только скачать и установить, но и обновлять даром. Вот далеко не полный список альтернатив 1С: ИП УСН 2, Инфо-предприятие, Бизнес Пак и Своя Технология. В смысле функциональности они уступают решениям лидера рынка, но работать с альтернативными программами людям без бухгалтерского образования проще. Для теста мы выбрали первые два варианта за оптимальное сочетание возможностей бесплатной версии, удобства использования, частоты обновлений и стоимости коммерческих лицензий.

Как развернуть?


Условно-бесплатные бухгалтерские программы не особо требовательны к ресурсам и работают даже на Windows XP. Развернуть их можно на локальном компьютере или недорогом виртуальном сервере. Преимущества второго варианта в отсутствии необходимости приобретать и обслуживать оборудование и возможности получить доступ к системе из любой точки планеты, где есть интернет. Используя VDS, нетрудно организовать и многопользовательскую удаленную работу, если вдруг возникнет такая потребность. Дорогие тарифы для этого не требуются: мы проводили все тесты на машине с минимальной конфигурацией и Windows Server 2012.



Дальше нужно скачать выбранный дистрибутив и установить его на виртуальный сервер.

Начнем с ИП УСН 2. Для работы программе потребуется также .NET Framework 2.0 или выше. При годовом обороте до 1 млн. рублей ее можно использовать бесплатно, а при более высоком лицензия стоит 1000 рублей в год. Пользователю доступны функции финансового учета (банковские и кассовые операции), работа с первичными документами, автоматический расчет налогов и взносов, подготовка налоговой отчетности и другие возможности, включая интеграцию с системами ЭДО и банк-клиентом, конструктор договоров и разнообразные справочники. Поддерживается только режим УСН 6% без наемных работников. После запуска программа регулярно проверяет наличие обновлений на сайте разработчика.



Возможности бухгалтерии Инфо-Предприятия гораздо шире, к тому же разработчик предлагает и другие продукты, а в бесплатную поставку входит налоговый учет для разных режимов налогообложения (ОРН, УСН, УСН на основе патента, ЕСХН, ЕНВД), работа с первичными документами, финансовый учет, взаимодействие с банками и касса. Также бесплатно доступен модуль Зарплата, кадровый учет, внутренние отчеты и многомерная аналитика. В бесплатной версии нет возможностей многопользовательской работы, программирования на встроенном языке, а также некоторых дополнительных функций и интеграции с другими продуктами разработчика для комплексной автоматизации предприятия. Детальное сравнение версий доступно на сайте.



Мы посмотрели одну простую программу для ИП на УСН 6% без сотрудников и одну продвинутую разработку, подходящую и для более крупного бизнеса. Вывод прост: в России есть актуальные учетные системы, которыми можно пользоваться бесплатно. Сделаны они неплохо, но чтобы определиться с выбором, предпринимателям лучше развернуть программы самостоятельно. Для тестов рекомендуем использовать наш виртуальный сервер )

Если тема заинтересует читателей блога, мы изучим ее более детально. За кадром осталось немало интересного: интеграция запущенного на VDS бухгалтерского приложения с системами юридически значимого ЭДО, дистанционная сдача отчетности, работа с ККМ и т.д.



Подробнее..

Перевод Первое знакомство с Moon.js

24.09.2020 16:22:36 | Автор: admin
Сегодня речь пойдёт об очередной JavaScript-библиотеке, предназначенной для разработки интерфейсов. Возникает такое ощущение, что такие библиотеки появляются всё чаще и чаще. В этом материале мы рассмотрим библиотеку Moon.js и раскроем её особенности, о которых нужно знать для того чтобы приступить к работе с ней. В частности, мы поговорим о том, как создавать новые Moon.js-проекты, о том, как создавать элементы интерфейсов, как обрабатывать события. Освоив это руководство, вы сможете пользоваться Moon.js для разработки собственных приложений.



Библиотека Moon.js


Moon.js это минималистичная JavaScript-библиотека, предназначенная для разработки быстрых и функциональных интерфейсов. Она имеет сравнительно небольшие размеры, что позволяет создавать на её основе достаточно компактные приложения. Библиотека отличается очень высокой производительностью

В Moon.js используется подход к проектированию интерфейсов, основанный на компонентах. Для создания компонентов применяются шаблоны. Эта библиотека весьма похожа на Vue.js.

Сильные стороны Moon.js


  • Moon.js отличается компактными размерами (в минифицированном и сжатом виде это около 2 Кб). Это меньше, чем размеры других библиотек и фреймворков вроде React и Angular.
  • Эта библиотека отличается высокой скоростью рендеринга интерфейсов.
  • Moon.js это библиотека, основанная на функциональных методах разработки. При работе с ней используется подход к проектированию интерфейсов, основанный на так называемых драйверах.

Начало работы


Библиотеку Moon.js можно включить в проект двумя способами. Первый заключается в установке её из NPM. Второй в её подключении непосредственно к странице, на которой её планируется использовать.

Если решено воспользоваться NPM-вариантом библиотеки, то сначала нужно будет установить пакет moon-cli, инструмент командной строки:

$ npm i moon-cli -g

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

Для создания проекта, основанного на Moon.js, можно выполнить следующую команду:

$ moon create moon-prj

Эта команда создаёт новый проект в папке moon-prj. После того, как будет завершено создание проекта, в вашем распоряжении окажется основа будущего приложения.

Второй вариант использования Moon.js предусматривает её подключение к странице, на которой её планируется использовать. У библиотеки есть модуль moon-browser, который позволяет пользоваться её возможностями непосредственно на странице, к которой она подключена.

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

<script src="http://personeltest.ru/aways/unpkg.com/moon"></script><script src="http://personeltest.ru/aways/unpkg.com/moon-browser"></script>

Как видите, соответствующие скрипты загружаются с CDN unpkg. В первом теге импортируется основная библиотека. Во втором библиотека moon-browser. Она отвечает за компиляцию шаблонов Moon.js, за приведение их к виду, пригодному для вывода браузером.

Теперь, для того чтобы воспользоваться синтаксическими конструкциями Moon.js на странице, нужно будет включить их в тег <script>, не забыв задать его атрибут type как text/moon.

<!-- Подключение к странице внешнего скрипта --><script src="./main-script.js" type="text/moon"></script><!-- Описание интерфейса в коде, встроенном в страницу --><script type="text/moon">...</script>

Подключение Moon.js-приложения к странице


Moon.js, как и другие библиотеки и фреймворки, используемые для создания одностраничных приложений, подключается к определённому элементу страницы. Обычно роль контейнера для Moon.js-приложения играет элемент <div>:

<div id="root"></div>

Подобный элемент, являющийся корневым элементом Moon.js-приложения, размещают в коде файла index.html, представляющего собой точку входа в проект.

Для подключения Moon.js-приложения к этому элементу используется драйвер view (ниже мы поговорим о драйверах подробнее):

Moon.use({view: Moon.view.driver("#root")})

Данная конструкция сообщает библиотеке о том, что она должна подключить приложение к элементу с идентификатором root. При необходимости указать библиотеке подобный элемент можно, воспользовавшись браузерным API, предназначенным для работы с DOM:

Moon.use({view: Moon.view.driver(document.getElementById("root"))})

Теперь поговорим о том, как в Moon.js организована работа с данными, и о том, как с помощью этой библиотеки создавать элементы интерфейсов.

Синтаксис описания элементов интерфейса


Для описания Moon.js-интерфейсов используется язык программирования Moon View Language (MVL), который был разработан специально для решения данной задачи. Он напоминает JSX. Этот язык применяется для описания элементов и для настройки их взаимоотношений. Вот пример:

<script type="text/moon">function aView(data) {return (<div>Hi from Moon</div>)}</script>

Несложно заметить то, что в этом фрагменте Moon.js-кода, ответственного за формирование элемента <div>, используются синтаксические структуры, напоминающие HTML. Но эти структуры используются в JavaScript-коде. Такой JavaScript-код браузер выполнить не сможет, но это от него и не требуется, так как Moon.js компилирует подобные конструкции в обычный JavaScript.

Работа с данными


В Moon.js для управления визуальными представлениями элементов и для работы с данными используется концепция драйверов. Здесь мы взглянем на драйвер, позволяющий работать с данными, а в следующем разделе поговорим о драйвере, предназначенном для работы с элементами интерфейса.

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

Задать начальные данные Moon.js-приложения можно с помощью API Moon.use:

Moon.use({data: Moon.data.driver})

Записывать новые данные в состояния можно, возвращая их из соответствующих функций:

Moon.run(({ data }) => {console.log(data) // undefinedreturn {data: "Nnamdi"}})

API Moon.run отвечает за запуск приложения. Коллбэк, переданный этому API, получает ссылку на глобальные данные в аргументе data. Так как на момент вызова этой функции в data пока ничего нет, команда console.log из этого примера выведет undefined.

Мы возвращаем из коллбэка объект, у которого имеется свойство data со значением Nnamdi. Этот объект будет представлять собой новое состояние приложение, данными которого смогут воспользоваться любые другие функции, обращающиеся к data.

Механизм работы с данными в Moon.js мы рассмотрели. Теперь подробнее поговорим о работе с элементами интерфейса.

Работа с элементами интерфейса


В Moon.js имеется драйвер view, который предназначен для создания элементов и для монтирования их в DOM.

Мы уже рассматривали фрагмент кода, повторённый ниже, в котором к элементу <div> подключается базовый элемент Moon.js:

Moon.use({view: Moon.view.driver("#root")})

Именно тут производится монтирование элемента. Теперь функции могут возвращать элементы, которые способны заменять старые элементы. Их можно представлять в виде объектов, содержащих свойство view, в которое записаны соответствующие данные. Библиотека берёт значение свойства view из возвращаемого функцией объекта и записывает его в элемент, подключённый к элементу с идентификатором root.

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

function handleClick() {return {};}Moon.run(() => ({view: <button @click=handleClick>Click Me!</button>}));

Здесь коллбэк, передаваемый Moon.run, выводит в DOM кнопку. Происходит это из-за того, что функция возвращает объект со свойством view. Значение, назначенное этому свойству, попадает в DOM.

У кнопки имеется обработчик события click, представленный функцией handleClick. Эта функция возвращает пустой объект, её вызов не приводит к внесению изменений в DOM.

Создание элементов


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

const { div, text, node, p } = Moon.view.m

Moon.js экспортирует функции, имена которых соответствуют именам создаваемых с их помощью элементов. Так, функция div позволяет создавать элементы <div>. Функция text создаёт текстовые узлы. Функция node позволяет создавать пользовательские элементы. Функция p создаёт элементы <p>. Как видите, имена этих функций ясно указывают на их предназначение.

Создадим элемент <div>:

const Div = div({});

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

const Div = div({class: "DivClass"});

Здесь мы описали элемент <div>, в атрибут class которого должно быть записано значение DivClass.

Вот как создать текстовый элемент:

const Text = text({ data: "A text node" });

В свойстве data объекта, переданного функции text, имеется текст для элемента.

Создадим пользовательский элемент:

const CustomEl = node("custom-el");

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

CustomEl({ "attr": "attr-value"})

События


Подключать к элементам обработчики событий можно, пользуясь конструкцией, в которой применяется символ @:

function handleClick() {return {};}Moon.run(() => ({view: <button @click=handleClick>Click Me!</button>}));

В результате на страницу будет выведена кнопка с текстом Click Me, по нажатию на которую будет вызвана функция handleClick.

Компоненты


В Moon.js функции это компоненты. Это означает, что функции можно упоминать в описании элементов интерфейса. То, что возвращает функция, будет включено в состав элемента.

Предположим, у нас есть такая функция:

function aView({ data }) {return <div>A View</div>}

Эта функция, aView, возвращает элемент, который может быть отрендерен:

Moon.run(() => {view: <div><aView /></div>})

Имя функции в этом примере используется в роли имени элемента. В результате выполнения этого кода окажется, что то, что возвращает функция, будет помещено в тег <div>. Когда всё это попадёт в DOM, там окажется такая разметка:

<div><div>A View</div></div>

Разработка приложений, основанных на Moon.js


Для того чтобы собрать воедино всё то, о чём мы только что говорили, давайте создадим на Moon.js простое TODO-приложение. Здесь мы воспользуемся соответствующим примером, который подготовлен разработчиками Moon.js.

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

Вот как выглядит страница этого приложения.


Страница приложения

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

Начнём работу с создания файла index.html. Здесь мы подключим Moon.js непосредственно к странице:

<html><body><div id="root"></div></body><script src="http://personeltest.ru/aways/unpkg.com/moon"></script><script src="http://personeltest.ru/aways/unpkg.com/moon-browser"></script><!-- Воспользуемся скриптом, встроенным в страницу --><script type="text/moon">function viewTodos({data, view}) {return (<div><input type="text" value=data.todo @input=updateTodo/><button @click=createTodo>Create</button><ul children=(data.todos.map(todo =><li>{todo}</li>))/></div>)}function updateTodo({ data, view }) {const dataNew = { ...data, todo: view.target.value };return {data: dataNew,view: <viewTodos data=dataNew/>}}function createTodo({ data }) {const dataNew = {todo: "",todos: [...data.todos, data.todo]};return {data: dataNew,view: <viewTodos data=dataNew/>}}<!-- Настройка драйверов data и view -->Moon.use({data: Moon.data.driver,view: Moon.view.driver("#root")})<!-- Запуск приложения -->Moon.run(() => {data: [],view: <viewTodos data=[]>})</script></html>

Функция viewTodos выводит элементы, необходимые для ввода сведений о новых делах и для вывода их в виде списка. Её аргументами являются data и view.

Функция createTodo создаёт новое дело и возвращает его в свойстве data возвращаемого ей объекта.

Функция updateTodo записывает новое дело в состояние приложения.

Обратите внимание на обработчики событий @click и @input, которые имеются в функции viewTodos. Событие @input вызывается при вводе текста, описывающего дело, в соответствующее поле. При обработке этого события вызывается функция updateTodo. Аргумент view в этой функции представляет произошедшее событие. Пользуясь им, мы обращаемся к DOM и получаем данные, введённые в поле. Затем эти данные попадают в состояние в виде свойства todo.

Событие @click вызывается после нажатия на кнопку. Оно выполняет запись нового дела в список дел. Для решения этой задачи используется функция createTodo. Эта функция обращается к свойству состояния todo и записывает новые данные в свойство todos, после чего, в свойстве view возвращаемого ей объекта, возвращает элемент <viewTodos>, представленный соответствующей функцией, в атрибут data которого записано значение dataNew.

Это приведёт к выполнению повторного рендеринга viewTodos и к обновлению DOM. В список дел, выводимый на странице, будет добавлено новое дело.

Запустите это приложение в браузере и поэкспериментируйте с ним.

Итоги


Мы разобрали основы Moon.js. А именно, поговорили о том, что пользоваться библиотекой можно, устанавливая её из NPM и подключая к страницам напрямую. Далее, мы обсудили внутренние механизмы библиотеки: работу с данными, обработку событий, разработку компонентов.

Мне кажется, что Moon.js это приятная библиотека. И, если даже не говорить о других её достоинствах, она мне симпатична из-за её компактного размера.

Пользовались ли вы Moon.js?



Подробнее..

Тотальный деанон в Telegram

25.09.2020 12:09:30 | Автор: admin


tl;dr: исследую возможности для сопоставления аккаунтов с номерами телефонов в российском сегменте Телеграма.

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

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

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

Я взял несколько сим-карт, `telethon` (Python-модуль с полноценной реализацией MTProto) и попробовал создать такую базу у себя.

Расшаривание контактов и добавление в группу


Помните историю про гонконгский деанон? Бот добавлял пользователей в группу по номеру телефона, тем самым получал аккаунт, привязанный к телефону. В этой же статье журналист ZDNet связался с представителем Telegram. Последний заявил что массовый импорт будет сопряжён с проблемами.
We have suspected that some government-sponsored attackers have exploited this bug and use it to target Hong Kong protesters, in some cases posting immediate dangers to the life of the protestors

Поэтому я решил сначала пошарить контакты. Интерфейс официальных Telegram-клиентов позволяет расшаривать только тех пользователей, чей номер вам так или иначе видно. Однако, `telethon` позволяет расшаривать контакты с произвольным номером. Судя по его API, функция расшаривания это отправка файла определённого типа. Для предварительной проверки я набросал скрипт, который без лишних вопросов отправил указанный контакт моему основному аккаунту.

Для проверки скриптом, я завёл чистый аккаунт (далее Бот), и отправил в ещё один аккаунт (далее Получатель) три номера: Паши, Даши и свой. У всех есть Telegram. Паша расшарил свой телефон вообще всем. Даша добавила в контакты Получателя. Свой номер я добавил дважды: сначала добавив Бота к себе в контакты, потом удалил у себя бота и добавил себя в контакты Боту.



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

Синхронизация


Синхронизация контактов, как я уже сказал, потенциально влечёт к ограничениям для аккаунта. Но как это выглядит? Я написал ещё один [скрипт](http://personeltest.ru/aways/github.com/asz/telegram_yellow_pages/blob/main/syncer.py), забирающий из базы случайные номера и добавляющий их в контакты. После этого скрипт парсит контакты, идентификаторы найденых в ростере аккаунтов добавляет обратно в базу, остальных отмечает нулями и удаляет контакты из ростера.

Затем я прогнал 5000 рандомных номеров, по слухам, именно такие лимиты работают в Telegram. В выводе не нашёл ни одного идентификатора, кроме самого Бота. Теперь, чтобы исключить возможные ошибки в коде и обманку Телеграма, добавляю к рандомным номерам вручную номер Даши, отключаю удаление контактов из ростера, уменьшаю объём выборки до 3000 номеров и прогоняю снова. Даши нет ни в ростере, ни в базе. Попытка вручную добавить Дашу намекает, что сработали лимиты Телеграма.



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

Или нет?


В интернете упоминается как минимум два сервиса, которые, якобы просканировали широкий диапазон номеров. Один из них я проверил, работает плохо. Предположим, второй не врёт и им это действительно удалось. Давайте даже предположим, что им не нужно обрабатывать все 600 миллионов номеров и они откуда-то знают 150 миллионов реально активных номеров (чуть больше, чем по одному номеру на душу населения РФ). Сколько будет стоить просканировать всех за полгода, соблюдая все ограничения мессенджера? А за три месяца? А за месяц? А за один день?

Допустим, с одного номера можно сосканировать 5000 контактов в первый день и ещё 100 в каждый последующий. За полгода с каждого номера можно перебрать 23000 контактов (180*100+5000), для перебора понадобится около 6500 номеров (150000000/23000). Не так уж много, правда? Если каждая симка обойдётся в 150 рублей (а это дорого!), то расходы на их приобретение составят менее миллиона рублей. Подъёмная сумма даже для малого бизнеса! Для SIM-карт даже много оборудования держать не нужно, залогинился и запускаешь скрипт раз в день.

Но давайте пересчитаем по максимуму. Возьмём весь пул в 600 миллионов номеров и сократим сроки до месяца. Получится, что нужно 75 тысяч SIM-карт, которые обойдутся всего где-то в десять раз дороже (600000000/(5000+30*100)*150=11250000). Придётся постараться найти столько симок, зато можно сократить их стоимость в такой партии. Потенциально можно использовать сервисы, которые позволяют регистрировать аккаунт от 3.5 рублей за штуку, а самые отбитые могут распространять трояны, чтобы крали SMS. Тогда это будет стоить сильно дешевле. Разработка не кажется сверхсложной, хостинг клиентов также не должен стать большой проблемой. Возможно, придётся использовать множество прокси, но это не точно.

Мне не удалось собрать базу из-за лимитов Telegram и это хорошо. Значит, есть некоторый порог входа для таких действий. Бесполезные скрипты я сложил в гит. Но нет ничего крайне сложного сделать это при наличии некоторых ресурсов. Особенно, если ограничить интересы конкретными регионами, например, в Еврейской АО меньше миллиона номеров в пуле, а в Башкортостане 12.5 миллионов.

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



Подробнее..

Перевод Горячая четвёрка умирающих языков программирования

25.09.2020 16:06:58 | Автор: admin
Я занимался поиском лучших языков программирования 2020 года и наткнулся на страницы, на которых шла речь о языках, теряющих популярность. Я программист, и я понимаю, что любому программисту крайне важно знать о том, какие технологии являются актуальными, а какие нет.

Каждый программист это писатель.

Серкан Лейлек


Я, после того, как насмотрелся на отчёты о языках программирования, теряющих актуальность, выбрал 4 языка, которые, как я полагаю, уже не стоят того, чтобы их изучали. Я, ради подкрепления своих выводов, прибегну к некоторым показателям популярности языков. В частности, речь идёт об индексе PYPL (PopularitY of Programming Language Index, индекс популярности языков программирования), о данных Google Trends и о некоторых сведениях, которые можно найти на платформе YouTube.


Фрагмент рейтинга PYPL (источник)

Платформа YouTube использовалась мной в качестве источника данных о перспективности языков программирования через оценку популярности видеоуроков по соответствующим языкам.

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

Но хватит предисловий. Поговорим об умирающих языках программирования.

1. Perl


Интерес к языку программирования Perl стремительно падает. Хорошие показатели он демонстрировал в период с 2004 по 2009 годы, а после этого начался спад. Хотя этот язык пока и не мёртв, но он уже и не очень-то жив.

Информацию по нему не особенно активно ищут на YouTube и в Google. Например, есть видео по Perl, загруженное 4 года назад и набравшее всего 240 тысяч просмотров.


Видео по Perl

Кроме того, показатели языка идут вниз и в рейтинге PYPL.

Я решил сравнить Perl с каким-нибудь другим языком, с Python в данном случае, и обратился к Google Trends.


Сравнение Perl (красная линия) и Python (синяя линия), последние 12 месяцев

Как видно, красная линия, представляющая Perl, находится где-то на уровне нуля.

2. Haskell


Язык Haskell выглядит лучше, чем Perl. Он, к тому же, используется во многих крупных компаниях вроде Facebook и IBM. На YouTube есть видео по Haskell, загруженное 5 лет назад. Оно набрало 585 тысяч просмотров.


Видео по Haskell

Посмотрим теперь на показатели Google Trends, сравним Haskell и Python.


Сравнение Haskell (синяя линия) и Python (красная линия), последние 5 лет

Haskell, в сравнении с Python, выглядит более чем скромно. Синяя линия, представляющая Haskell, стелется по земле, а Python, представленный красной линией, показывает уверенный восходящий тренд.

3. Objective-C


Язык Objective-C, если ориентироваться на рейтинг PYPL, вырос в популярности на 0,2%. А что будет, если взглянуть на данные с YouTube?


Видео по Objective-C

Видео, загруженное 5 лет назад, набрало 250 тысяч просмотров.

Обратимся теперь к показателям Google Trends.


Сравнение Objective-C (синяя линия) и Python (красная линия), последние 5 лет

Конечно, многие всё ещё пользуются Objective-C. Но, хотя по этому языку есть вакансии, если вы строите планы на будущее и посматриваете на Objective-C, то вам стоит переключить внимание на Swift.

4. Visual Basic for Applications


Visual Basic for Applications, VBA, был у всех на слуху в 2004 году, а вот после 2009 интерес к нему начал падать. Я, например, изучал этот язык в школе.

Рейтинг PYPL указывает на то, что популярность VBA упала на 0,2%.

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


Видео по VBA

Если посмотреть на данные по VBA, которые имеются на Google Trends, то окажется, что интерес к VBA с 2004 года стабильно падает.


Сравнение VBA (красная линия) и Python (синяя линия), c 2004 года по настоящее время

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

Python


Я занимаюсь серверной разработкой, используя Python. Я, кроме того, сделал несколько проектов, используя фреймворк Django. Что тут сказать мне нравится Python.

Это, если верить тому, что выдаёт Google, язык, который лучше других языков помогает в поиске работы в 2020 году.


Языки, знание которых помогает в поиске работы

Я, например, создал проект на Django. А именно, речь идёт о сайте с вопросами и ответами для разработчиков. Этот проект всё ещё в работе. Я расширяю его и занимаюсь его оптимизацией.

Python в рейтинге PYPL демонстрирует рост на 2,9%. Если поинтересоваться данными YouTube по просмотрам видео о Python, то окажется, что они, за короткие промежутки времени, набирают миллионы просмотров.


Видео по Python

Анализ исследования Stack Overflow


Выше я опирался на рейтинг PYPL, на данные с Google Trends и на анализ видео по интересующим меня языкам программирования на YouTube. Теперь же я обращусь к результатам опроса разработчиков, проведённого Stack Overflow в 2020 году. А именно, к данным по языкам программирования, на которых программисты пишут, но не хотят продолжать этим заниматься.


Данные опроса Stack Overflow (источник)

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


Зарплаты разработчиков и их связь с языками программирования (источник)

Итоги


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

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

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

Какими языками программирования вы дополнили бы список умирающих технологий из этой статьи?



Подробнее..

Ultimate Guide по карьере в AI как выбрать специальность, прокачаться и найти классную работу

26.09.2020 12:23:55 | Автор: admin


3 августа в наших соцсетях выступал Сергей Ширкин, специалист по ML и искусственному интеллекту.

Сергей занимался автоматизацией финансовых технологий и базами данных в Сбербанке и Росбанке, построением финансовых моделей на основе машинного обучения и аналитической деятельностью в компании Equifax. Прогнозирует телесмотрение с применением методов искусственного интеллекта в Dentsu Aegis Network Russia. Приглашённый преподаватель ВШЭ (магистерская программа Коммуникации, основанные на данных).

Также Сергей исследует квантовые вычисления в приложении к ИИ и машинному обучению. Он стоит у истоков факультетов Искусственного интеллекта, Аналитики Big Data и Data Engineering онлайн-университета Geek University, на которых работает деканом и преподавателем.

Делимся с вами расшифровкой эфира и записью.

***

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

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

Порекомендуйте материалы по самостоятельному погружению в ИИ?


Если вы совсем новичок, то лучше начать с изучения Python. Быстрый способ для этого, как я видел на примере других новичков это сайт PythonTutor.ru. Там надо изучить теорию и порешать задачи хотя бы процентов 70. Задачи могут показаться сложными, если вы совсем не программировали до этого.

Следующий шаг язык запросов SQL, и здесь поможет сайт SQL-EX.ru: там есть упражнения по SQL. Они организованы по этапам: обучающий этап, этап для получения рейтинга можно занять определенное место в рейтинге. Здесь вы научитесь работать с базами данных. Параллельно там есть обучающие материалы от автора Моисеенко, и их довольно легко изучить.

Потом потребуется изучить само машинное обучение. Различные алгоритмы, начиная с линейной регрессии, логистической регрессии, вплоть до градиентного бустинга. Здесь очень много материалов. Потом можно перейти к нейронным сетям для компьютерного зрения, для NLP; вы изучите сверточные, рекуррентные нейронные сети, и самые современные трансформеры, Берт и т.д.

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

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

Сейчас компьютерное зрение достигло больших успехов. Параллельно развивается обработка естественного языка NLP. С появлением модели GPT-3, которые создала компания OpenAI пару месяцев назад, нейросеть научилась генерировать текст (а также музыку и другие последовательности). Это один из важных шагов в NLP скорее всего, в этом десятилетии она достигнет расцвета. Появятся чат-боты, которые смогут полноценно поддерживать диалог с человеком.

SQL и Python немного. После курсов по data science, без опыта, можно сразу устроиться data scientist, или сначала надо поработать аналитиком БД?


Сейчас попасть в data science сложнее, чем 5 лет назад. Тогда можно было принять участие в каком-нибудь конкурсе на Kaggle и занять место не обязательно самое первое, например, в первых 10% в каком-нибудь интересном соревновании, не обучающего уровня. После этого можно было уже ходить по компаниям, отвечать на несложные вопросы по машинному обучению, и такого человека могли взять. Специалистов было мало.

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

Хороший путь сначала поработать с данными, аналитиком баз данных или аналитиком данных. Факт в том, что вы должны научиться предварительно обрабатывать, чистить данные, применять статистику. Это могут быть технологии БД, Python в том числе. Когда вы наберетесь опыта, появится у вас бэкграунд, то вы сможете, используя свои знания по библиотекам data science в Python Pandas, NumPy, SKLearn, устроиться на вакансию, связанную с ИИ или data science.

В чем отличия специалистов от ИИ от data scientists?


Нужен ли C++ специалисту по ИИ? Что посоветуете изучить для того, чтобы стать спецом по компьютерному зрению?

Сейчас в вакансиях западных компаний появилось разделение: помимо data scientist есть отдельные вакансии для специалистов по ИИ. Раньше подразумевалось, что data scientist это человек, который занимается и анализом табличных данных, и задачами компьютерного зрения, и задачами NLP. Также существовала вакансия аналитика данных она оплачивалась меньше, хотя и была также довольно престижной; такой человек должен был анализировать данные, но не слишком углубляться в ИИ, связанный с речью, текстом и изображениями, работая в основном с табличными данными. Затем произошло смешение вакансий: в Долине всех аналитиков данных стали называть data scientist, включая и тех, кто работает только с табличными данными, и тех, кто работает с NLP и компьютерным зрением. И одновременно, чуть позже, начали выделять отдельно специалиста по ИИ. В российских компаниях обычно такого разделениям нет, хотя иногда бывают специализированные вакансии например, инженер NLP/компьютерного зрения. Data scientistу желательно понемногу уметь все.

Насчет С++: самый основной это Python. То есть, если вы работаете специалистом по ИИ, вы должны использовать TensorFLow, Keras или PyTorch он сейчас на первом месте. Но если вы пишете более низкоуровневые программы например, если вакансия связана с робомобилями, то часто будет требоваться код на C++. Python не всегда быстро работает. Библиотеки для машинного обучения обычно написаны на C++, но иногда нужно всю программу написать на C++: помимо самих моделей может работать логика (if-else и т.д.), и на С++ это работает быстрее. Конечно, сразу приходить на такую вакансию сложно, и лучше сперва поработать на такой, где будет достаточно Python например, там, где идет аналитика соцсетей с анализом изображений, без потребности в быстрой обработке.

Для того, чтобы стать спецом, надо научиться работать с библиотеками для нейронных сетей, изучить библиотеку OpenCV для Python она также есть для C++. Так вы получите инструментарий. Еще желательно уметь работать с библиотекой NumPy, понимать саму математику анализа изображений то есть, разбираться в линейной алгебре и матанализе, также знать архитектуру нейронных сетей. И так далее.

Почему на собеседованиях в ML задают вопросы о том, как разруливать конфликты в hash-таблице?


Почему это маркер при приеме на работу, если это можно загуглить по ходу?

Не в каждой вакансии это спрашивают. Если вы идете на аналитику табличных данных, то вряд ли у вас это спросят. Точно спросят, если вы претендуете на место ML-инженера: то есть, вы не просто создаете модели ML, вы их еще и внедряете, и вам надо знать алгоритмы и структуры данных. А если вы разрабатываете что-то наподобие робомобиля, то тем более: там придется писать код высокого и низкого уровня, и это знание обязательно. А иногда такое знание требуется и в анализе табличных данных допустим, вы пишете модуль для этого на C++.
Если вы пока не готовы на такие вакансии претендовать, можно пройти побольше собеседований. Допустим, если вы пойдете устраиваться data scientistом в банк, то там подобных вопросов будет меньше.

Пишу на Python 10 лет, но без высшего образования. Насколько сложно входить в сферу ИИ без вышмата?


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

Pandas, SKLearn, Catboost, Seaborn, результаты в тренировочных соревнованиях Kaggle 3% и 13%. Нужно ли погружаться в DL, или уже можно искать работу?


По библиотекам уже все хорошо; у вас уже есть Pandas библиотека для работы с табличными данными, и SKLearn модели машинного обучения, и Catboost градиентный бустинг, и Seaborn для визуализации. Результаты 3% и 13% значит, если это не учебные соревнования, то с такими результатами у вас уже должна быть какая-то медаль.

Deep Learning не всегда нужен. Вы можете уже пробовать искать работу, я думаю. Но, если вам нужна именно работа с DL, то нужно еще поучить нейронные сети.

Какой базовый набор книг нужно прочесть?


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

Насколько сейчас востребованы эти профессии? Будет ли много вакансий через 2 года?


Если вспомнить 2015-16 годы тогда, например, на Headhunter было не больше 5-10 вакансий data scientist. То есть, был практически пустой рынок. Конечно, потом было переименование аналитиков в data scientist, но этого тоже было немного.

Сейчас одномоментно требуется несколько сотен, если смотреть по тому же сайту. Говорят, есть вакансии, которых там нет. Например, на ODS OpenDataScience если посмотреть, есть отдельный раздел вакансий. В целом, пока вакансии не кончаются я думаю, через 2 года их будет только больше. Не только крупные компании этим занимаются: есть стартапы, мелкие компании; data scientistы сейчас требуются и в госучреждениях например, в разных муниципальных департаментах, в налоговой службе и так далее.

В какой отрасли ИИ наиболее востребован?


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

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

Сто ценится больше при приеме на работу в data science: знание математики, понимание работы конкретных алгоритмов, опыт работы?


За плечами техническая магистратура и год работы аналитиком данных в консалтинге.

У вас хороший бэкграунд технический вуз, год работы аналитиком данных. Если вы уже изучили технологии и умеете программировать, то попасть в data science легко. Если вы работали а анализе БД и знаете SQL это большой плюс, а если прибавить программирование и машинное обучение это очень хороший набор.

Расскажу о том, как я строю модели машинного обучения на работе. Компания, в которой я работаю это Dentsu Aegis, очень известная компания, особенно среди тех, кто работает в маркетинге. Это коммуникационная группа, входящая в топ-5 в мире; ее штаб находится в Токио, есть офисы в 145 странах. Российский филиал Dentsu Aegis Network Russia. В России работает 25 лет и выступает пионером медиа-инноваций.

Я расскажу про тот участок, за который отвечаю как data scientist. Это как раз то применение, о котором я рассказывал как о наиболее очевидном в практическом применении. ИИ в маркетинге помогает автоматизировать многие задачи специалистов, и одна из них прогнозирование просмотра различных видов контента различными целевыми аудиториями. Я расскажу подробнее про одну из своих непосредственных задач прогнозирование телесмотрения.

Аудиторий может быть несколько сотен, и для того, чтобы их прогнозировать вручную, требовалась бы работа десятков специалистов. Это непомерно. Очень большое количество данных до миллиардов строк в таблицах. Надо заботиться не только о том, чтобы построить модель машинного обучения, но и о том, чтобы она быстро работала. Для такой работа надо хорошо знать реляционные и нереляционные БД, работать с Linux, иметь навыки devops и вообще разбираться в архитектуре приложения, в IT-инфраструктуре компании, хорошо знать Python, возможно C++.
Когда мы строим прогноз телепросмотров, мы применяем современные методы машинного обучения. Для табличных данных это градиентный бустинг и случайный лес. Если анализируется текст, мы применяем нейронные сети; помимо них тематическое моделирование, TF-IDF и другие распространенные методы NLP.

Мы применяем градиентный бустинг, потому что, если мы прогнозируем с использованием табличных данных, то по работе с такими данными градиентный бустинг опережает все известные алгоритмы. В Kaggle, начиная с 2018 года, все основные достижения в соревнованиях с использованием табличных данных достигались именно с помощью градиентного бустинга. Большинство кегглеров тогда перешло на XGBoost это была первая известная библиотека для градиентного бустинга, а позже многие освоили LightGBM от Microsoft или CatBoost от Yandex. Для задачи прогноза просмотров телепередач также хорошо подходит применение временных рядов, но такие методы не всегда хорошо работают периодически появляются неожиданные события, на которые нужно вовремя реагировать или предвосхищать. Иногда встречаются большие аномальные периоды от нескольких дней до месяцев: например, ЧМ по футболу в 2018 году сильно повлиял на просмотры. Карантин тоже стал аномальным периодом: люди начали проводить больше времени дома и больше смотреть ТВ. Это тоже надо как-то учитывать, предвосхищать. Вообще, этот период это своеобразный вызов для машинного обучения и ИИ, потому что нужно постоянно осуществлять мониторинг моделей и контролировать их, чтобы они работали корректно. Помимо аномальных периодов на прогноз оказывают влияние праздники, погодные условия, изменения трендов в просмотрах конкретных передач и каналов. В итоге модели получаются достаточно сложными, потому что надо учесть все возможные варианты, учесть или предвосхитить аномалии и отклонения.

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

Один из самых объемных по времени этапов работы с данными это feature engineering: обработка или создание признаков. Для этой части data science нужен большой опыт: заранее известных рецептов либо нет, либо они слишком просты, и способы подготовки признаков приходится придумывать на ходу.

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

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

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

Стоит ли обратить внимание на курс Data Science МФТИ/Yandex, или, возможно, посмотреть в сторону Udacity?


Я так понимаю, вы имеете ввиду курс от МФТИ/Yandex на Coursera. Udacity это отдельная площадка для обучения; там не только data science, хотя для ИИ и data science и предназначена довольно большая часть курсов. Я рекомендую не зацикливаться на одном ресурсе, а попробовать пройти несколько курсов. Курсы не совпадают на 100%, вы всегда можете найти что-то новое, чего раньше не знали. Также новый курс можно использовать для повторения. Например, курсы на GeekBrains на наших факультетах ИИ, data engineering и аналитики big data. Так как я являюсь их деканом и преподавателем, я могу более подробно рассказать о них.

Курсы объединяются в факультеты например, на факультете искусственного интеллекта есть 17 курсов, плюс 8 дополнительных. Почти в каждом курсе есть практическая работа как финальный проект. Таким образом, у обучающегося на нем специалиста появляется практика. Я рекомендую не просто изучать теорию, а делать проекты: хорошие практические умения приблизят вас к прохождению собеседований и началу карьеры.

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

Как учесть аномалии по временным рядам и можно ли их вырезать?


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

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

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

Каким образом устроиться на работу без подтвержденного опыта?


Хороший опыт это ваши проекты. То есть, если вы не просто учите теорию, а сразу делаете проект желательно, под руководством ментора (человека с опытом в data science и ИИ) то вы знаете, что вы делаете. Вы не просто умеете применять теорию, или применять модель к данным, найденным в интернете, а решать практические задачи. При работе над такими проектами вы получаете знания, которые нельзя получить из книг и курсов, и помощь ментора здесь неоценима.

Поговорим о книгах я приготовил небольшую стопку.

Если вы работаете в data science, то, скорее всего, вам придется работать в среде Linux. При этом вы не будете администратором то есть, слишком глубокие знания вам не понадобятся но уверенное знание этой платформы для простых административных задач (планирование запуска скриптов или распоряжение ресурсами ОС) будет обязательно. Здесь поможет книга LINUX карманный справочник Скотта Граннемана. Его можно изучить за пару дней.

По теории вероятностей я бы порекомендовал книгу Г. Г. Битнера Теория вероятностей в ней есть и теория, и задачи. Теория вероятностей пригодится вам и на собеседовании, и в работе.
Любому, кто работает в IT, требуется минимальный набор знаний и навыков. Соответственно, книга Теоретический минимум по Computer Science все, что нужно знать программисту и разработчику (Фило Владстон Феррейра) это ликбез по computer science.

Если вы будете погружаться в программирование и низкоуровневые разработки, то вам будут нужны алгоритмы. В книге Алгоритмы для начинающих теория и практика для разработчика Паноса Луридаса даются алгоритмы без привязки к конкретному языку. Есть более объемная книга для C++ Алгоритмы на C++ Роберта Седжвика; она полезна, если вы хотите исключить какие-то высокоуровневые операции, которые есть в Python, и создавать алгоритмы с нуля.

Если вы хотите получить общее представление о верхнеуровневой работе специалиста по data science, то вам подойдет книга Работа с данными в любой сфере как выйти на новый уровень, используя аналитику Кирилла Еременко. Здесь нет программирования. Но, если вы уже специалист, она пригодится вам только в том случае, если вы еще не работали с данными.
Далее: Data Science. Наука о данных с нуля Джоэля Граса тоже полезная книга. От того же издания Практическая статистика для специалистов Data Science. 50 важнейших понятий Питера Брюса и Эндрю Брюса. Здесь тоже можно изучить статистику.

Если вы будете работать с данными в Python и использовать библиотеку Pandas, то вам обязательно нужна Python и анализ данных Уэса Маккини автора самой библиотеки Pandas.
По машинному обучению я рекомендую две книги: Машинное обучение Петера Флаха и Python и машинное обучение Себастьяна Рашки.

Для глубокого обучения есть книга Глубокое обучение на Python Франсуа Шолле, там можно изучить нейронные сети для задач NLP и компьютерного зрения. Конкретно по NLP есть Прикладной анализ текстовых данных на Python Бенджамин Бенгфорд, Ребекка Белбро и Тони Охеда.

Если хотите изучить TensorFlow для глубокого обучения есть одноименная книга Бхарата Рамсундара и Реза Босаг Заде.

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

Что вы спрашиваете на собеседованиях?


Есть небольшой сборник вопросов. Есть вопросы по классическому машинному обучению специалист, который устраивается в сферу data science и ИИ, должен знать, как работают классические модели машинного обучения: линейная, логистическая регрессия, градиентный спуск, регуляризация L1-L2. Нужно, чтобы человек рассказал про принцип работы деревьев решений, про критерий информативности для задач классификации и регрессии; чтобы человек знал, как работает случайный лес, градиентный бустинг. Очень хорошо, если он знает отличия моделей градиентного бустинга Catboost, LightGBM, XGBoost то есть, чем отличаются эти библиотеки, как в них реализован градиентный бустинг. Также нужно, чтобы человек владел библиотеками для машинного обучения Pandas, NumPy, SKLearn. Если специалисту нужно будет работать с нейронными сетями, с компьютерным зрением, с NLP, то будут вопросы по этим темам.
Вопросов может быть очень много. Если человек хорошо отвечает, то интересно бывает расспросить его о каких-то его проектах если человек что-то сделал, у собеседующего сразу появляется много вопросов, связанных именно с проектами. Если у вас на GitHub есть личные проекты, или учебные проекты с курсов будет очень хорошо, если вы сумеете подробно рассказать про технологии и алгоритмы, которые вы применяли.

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

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

Что должно быть написано в резюме, чтобы получить приглашение на собеседование?


Резюме это ответственный момент. Во-первых, оно не должно быть раздутым по объему: в нем должен быть только релевантный опыт. Если вы работали по специальности, не связанной с IT это не нужно. Перечислите свои достижения вкратце, проекты, пройденные курсы, релевантные для вакансии. Вписывайте то, что показывает вас как специалиста, который способен выполнять эту работу. И, конечно, резюме должно быть читабельно.


Что было ранее


  1. Илона Папава, Senior Software Engineer в Facebook как попасть на стажировку, получить оффер и все о работе в компании
  2. Борис Янгель, ML-инженер Яндекса как не пополнить ряды стремных специалистов, если ты Data Scientist
  3. Александр Калошин, СEO LastBackend как запустить стартап, выйти на рынок Китая и получить 15 млн инвестиций.
  4. Наталья Теплухина, Vue.js core team member, GoogleDevExpret как пройти собеседование в GitLab, попасть в команду разработчиков Vue и стать Staff-engineer.
  5. Ашот Оганесян, основатель и технический директор компании DeviceLock кто ворует и зарабатывает на ваших персональных данных.
  6. Сания Галимова, маркетолог RUVDS как жить и работать с психиатрическим диагнозом. Часть 1. Часть 2.
  7. Илья Кашлаков, руководитель фронтенд-отдела Яндекс.Денег как стать тимлидом фронтендеров и как жить после этого.
  8. Влада Рау, Senior Digital Analyst в McKinsey Digital Labs как попасть на стажировку в Google, уйти в консалтинг и переехать в Лондон.
  9. Ричард Левелорд Грей, создатель игр Duke Nukem 3D, SiN, Blood про личную жизнь, любимые игры и о Москве.
  10. Вячеслав Дреер, гейм-дизайнер и продюсер игр с 12-летним стажем про игры, их жизненный цикл и монетизацию
  11. Андрей, технический директор GameAcademy как видеоигры помогают прокачивать реальные навыки и найти работу мечты.
  12. Александр Высоцкий, ведущий PHP-разработчик Badoo как создаются Highload проекты на PHP в Badoo.
  13. Андрей Евсюков, заместитель CTO в Delivery Club про найм 50 синьоров за 43 дня и о том, как оптимизировать фреймворк найма
  14. Джон Ромеро, создатель игр Doom, Quake и Wolfenstein 3D байки о том, как создавался DOOM
  15. Паша Жовнер, создатель тамагочи для хакеров Flipper Zero о своем проекте и другой деятельности
  16. Татьяна Ландо, лингвист-аналитик в Google как научить Google-ассистента человеческому поведению
  17. Путь от джуна до исполнительного директора в Сбербанке. Интервью с Алексеем Левановым
  18. Как Data Science продает вам рекламу? Интервью с инженером Unity



Подробнее..

Перевод Кунг-фу стиля Linux удобная работа с файлами по SSH

26.09.2020 16:11:14 | Автор: admin
Если у вас имеется больше одного Linux-компьютера, то вы, вероятно, постоянно пользуетесь ssh. Это отличный инструмент, но мне всегда казалась в нём странной одна деталь. Несмотря на то, что ssh-соединения позволяют передавать файлы с применением scp и sftp, у нас нет возможности перемещать файлы между локальной и удалённой системой, не запуская программу на локальном хосте, или не подключаясь к локальной машине с удалённой.



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

Я, на самом деле, не вполне достиг этой цели, но подобрался к её достижению очень близко. В этом материале я расскажу вам о скрипте, который позволяет монтировать удалённые директории на локальном компьютере. На локальной машине надо будет установить sshfs, но на удалённой, на которую вы, возможно, не можете устанавливать программы, ничего менять не придётся. Если же потратить на настройку систем некоторое время, и если на клиентском компьютере имеется работающий ssh-сервер, то можно будет ещё и монтировать локальные директории на удалённых системах. При этом не придётся беспокоиться о блокировке IP-адресов или портов. Фактически, если вы способны подключиться к удалённой машине, это означает, что вам удастся и то, о чём я хочу рассказать.

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

Нет ли тут подвоха?


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

Кроме того, работу значительно облегчает скрипт, о котором я расскажу. Он скрывает от пользователя детали, поэтому процедура подключения выглядит (почти) как обычно, а после этого всё работает как надо.

Пара слов о sshfs


Утилита sshfs даёт возможность работать с файловой системой в пользовательском пространстве (filesystem in userspace, FUSE). То есть, речь идёт о том, что в пользовательском пространстве имеется слой, находящийся поверх базовой файловой системы. В данном случае такой файловой системой является ssh-сервер, поддерживающий sftp. Это позволяет работать с файлами, находящимися на удалённой системе, воспринимая их так, будто они находятся в реальной файловой системе на локальном компьютере. Если вы ещё не пробовали sshfs попробуйте. Работает эта утилита очень хорошо.

Предположим, вы вошли на компьютер myserver и выполнили с локальной машины следующую команду:

sshfs myserver:/home/admin ~/mounts/myserver

Это приведёт к тому, что директория удалённого компьютера /home/admin будет доступна в локальной системе по пути ~/mounts/myserver.

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

Так как sshfs использует удалённо смонтированную версию файла, то все изменения, внесённые в файл, сохраняются на удалённой машине. А после того, как sshfs-соединение закрывают, на локальной компьютере ничего не остаётся. Сейчас мы это исправим.

Предварительная подготовка


Прежде чем я перейду к описанию скрипта, о котором было упомянуто выше, хочу рассказать о некоторых настройках клиента, которые вы, если хотите, можете доработать под себя. Так, тут я создаю директорию ~/remote, а в ней создаю поддиректории для каждого удалённого компьютера. Например это могут быть директории ~/remote/fileserver и ~/remote/lab.

Скрипт называется sshmount. Он принимает те же аргументы, что и ssh. Для упрощения работы со скриптом сведения об удалённом хосте стоит хранить в файле ~/.ssh/config, что позволит пользоваться простыми и короткими именами хостов. Например, сведения о компьютере lab могут выглядеть так:

Host labHostname lab.wd5gnr-dyn.netPort 444User alwForwardX11 yesForwardX11Trusted yesTCPKeepAlive yesCompression yesControlMaster autoControlPath ~/.ssh/master-%r@%h:%p

На самом деле, острой необходимости в этом нет, но при таком подходе в вашем распоряжении будет приятно выглядящая директория ~/remote/lab, а не сложная конструкция вида ~/remote/alw@lab.wd5gnr-dyn.net:444. Во всех этих параметрах нет ничего таинственного. Единственно, хочу обратить ваше внимание на то, что ControlMaster и ControlPath позволяют организовать более быструю работу с соединениями, что, в нашем случае, очень важно.

Кроме того, можно организовать автоматическое подключение к удалённой системе с использованием сертификата. Вот материал об этом.

Скрипт


Наш скрипт можно использовать двумя способами. Так, если его вызывают через ссылку к sshunmount, то он размонтирует файловую систему, связанную с указанным удалённым хостом. Если его вызывают иначе (обычно как sshmount), то он выполняет следующие три действия:

  1. Он проверяет, есть ли в директории ~/remote поддиректория, имя которой совпадает с именем хоста (например lab). Если такой директории нет он выводит сообщение об ошибке и продолжает работу.
  2. Если такая директория существует скрипт просматривает список смонтированных файловых систем на тот случай, если нужная файловая система уже смонтирована. Если это так он продолжает работу.
  3. Если директория не смонтирована он вызывает sshfs и продолжает работу.

Этот скрипт можно найти на GitHub. А вот его код, из которого убраны некоторые комментарии:

#!/bin/bashif [ "$1" == "" ]thenecho Usage: sshmount host [ssh_options] - Mount remote home folder on ~/remote/host and log inecho or: sshunmount host - Remove mount from ~/remote/hostexit 1fi# Если вызван как sshunmount...if [ $(basename "$0") == sshunmount ]thenecho Unmounting... 1>&2fusermount -u "$HOME/remote/$1"exit $?fi# Обычный вызов...if [ -d "$HOME/remote/$1" ] # Существует ли директория?thenif mount | grep "$HOME/remote/$1 " # Файловая система уже смонтирована?thenecho Already mounted 1>&2elsesshfs -o reconnect $1: $HOME/remote/$1 # mountfielseecho No remote directory ~/remote/$1 exists 1>&2fissh $@ # выполнить вход

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

Решаем обратную задачу


Если вы хотите поэкспериментировать с монтированием на сервере папок, находящихся на локальной машине, то нужно будет, чтобы на локальной машине работал бы ssh-сервер. Конечно, если ваш локальный компьютер видим и доступен серверу, то это просто: достаточно запустить на удалённом компьютере sshfs и смонтировать на нём папку с локального компьютера. Но во многих случаях у нас нет доступа к локальной системе, которая может быть расположена за файрволами или маршрутизаторами. Особенно это актуально в том случае, если роль локальной системы выполняет ноутбук, который может подключаться к сети из разных мест.

Но нашу задачу, несмотря на все эти сложности, всё же, можно решить. Её решение состоит из двух частей.

Во-первых надо, при вызове sshmount, указать дополнительный аргумент (файл можно отредактировать в том случае, если вам нужно будет постоянно выполнять подобную команду):

sshmount MyServer -R 5555:localhost:22

Во-вторых после подключения к хосту нужно выполнить такую команду:

sshfs -p 5555 localhost:/home/me ~/local

Благодаря опции -R на удалённой машине создаётся сокет на порте 5555 (который, естественно, должен быть свободным) и осуществляется его связь с портом 22 локальной машины. Если исходить из предположения о том, что ssh-сервер работает на порте 22, то это позволит серверу подключиться к локальной машине по тому же соединению. Ему не нужно знать наш IP-адрес или иметь открытый порт.

Команда sshfs, которую можно выполнять при запуске системы, связывает локальную директорию /home/me с директорией ~/local удалённого сервера. Если, вдобавок, войти в систему локально, то можно будет взглянуть на переменные окружения, имена которых начинаются с SSH_, и узнать подробности о SSH-соединении. Например, это переменные $SSH_CLIENT и $SSH_TTY.

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

Итоги


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

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

Чем вы пользуетесь для работы с файлами удалённых Linux-систем?



Подробнее..

Категории

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

© 2006-2020, personeltest.ru