• Как я изучал структуры данных и алгоритмы для собеседования в FAANG

    • Translation
    Продолжая тему устройства в FAANG, которую уже мы поднимали в нашем блоге, и специально к старту нового потока нашего курса по алгоритмам сегодня делюсь описанием пути Эско Обонга, старшего инженера-программиста Uber.

    Эта история началась в 2015 году, когда стартап, к которому я присоединился как «сотрудник-основатель», закрылся через шесть месяцев после первого раунда инвестиций, и я искал новую работу. Первое моё собеседование было с  Codecademy, где на этапе телефонного разговора меня заверили: «Не волнуйтесь, мы не задаём сумасшедших вопросов об алгоритмах или что-то в этом роде». И я им поверил…


    Приятного чтения!
  • Шаблон backend сервера на Golang — часть 2 (REST API)

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


    Первая часть шаблона была посвящена HTTP серверу:


    • настройка HTTP сервера через командную строку и конфигурационный файл
    • настройка параметров TLS HTTP сервера
    • настройка роутера и регистрация HTTP и prof-обработчиков
    • настройка логирования HTTP трафика, логирования ошибок в HTTP
    • HTTP Basic и MS AD аутентификация, JSON Web Token
    • запуск сервера с ожиданием возврата в канал ошибок
    • использование контекста для корректной остановки сервера и связанных сервисов
    • настройка кастомной обработки ошибок и кастомного логирования
    • сборка кода с внедрением версии, даты сборки и commit

    Вторая часть шаблона посвящена прототипированию REST API.
    Ссылка на репозиторий проекта осталась прежней.


    Архитектура шаблона REST API


    В ходе тестирования шаблона на стенде были получены следующие результаты.


    • в режиме прямого чтения из PostgreSQL — до 16 000 [get/sec], сoncurrency 1024, медиана 60 [ms]. Кажды Get запрашивает данные из двух таблиц общим размером 360 000 000 строк. Размер JSON 1800 байт.
    • в режиме кэширования эту цифру можно поднять до 100 000 — 120 000 [get/sec], сoncurrency 1024, медиана 2 [ms]. Transfer rate в пределах 200-250 [MB/sec]
    • на вставку в PostgreSQL — около 10 000 [insert/sec].
    Читать дальше →
  • Опыт использования генератора статических сайтов Hugo

      Делюсь 2-х летним опытом использования генератора статических сайтов Hugo. Заметка ориентирована на начинающих, но в этой заметке не будет инструкций "как установить Hugo" или "как создать первый пост". Эта заметка будет полезна тем, кто выбирает и сравнивает альтернативы для ведения блога.

      Читать дальше →
    • От микросервисного монолита к оркестратору бизнес-сервисов

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


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

          image

          В детстве я смотрел «Звездные войны» и хотел заполучить себе какой-нибудь фантастический девайс. Меч джедая возможен только в галактике Звездных войн с их специфической физикой. В нашей же вселенной, луч лазера не может лететь метр и потом резко обрываться. Делать светящуюся палку не интересно. А вот бластер… Сделать его стреляющим прерывистым лучем тоже не получится. Но сделать девайс, который «стреляет» красивым лучом в темноте вполне возможно.
          Со мной Сила, начнем...
        • Чего боятся тимлиды и почему им пора перестать это делать

            Я уверен, где-то существует книга «Как подсидеть тимлида». Она передается из рук в руки, из команды в команду и содержит советы типа: «Тимлид никогда не уволится по своей воле, потому что это не работа, а сказка! Его нужно сломать», или «Если ваш тимлид уехал в отпуск, напишите ему, что вам нужно поговорить, когда он вернется. Пусть вместо серфинга думает, что в его отсутствие команда разбежалась», а еще «Саботируйте попытки тимлида внедрить новые полезные рабочие процессы фразой из Agile-манифеста о том, что люди и взаимодействие важнее процессов и инструментов». Иначе просто невозможно объяснить, почему все тимлиды сталкиваются с одними и теми же проблемами и страхами.

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


            Читать дальше →
          • Собираем свой flow для git с нуля

              На днях вышла прекрасная, хотя и спорная статья — Please, stop using GitFlow! (и еще десяток на эту же тему после нее).


              Ее основными тезисами были:


              • GitFlow противоречит тезису "ветки должны быть короткоживущими".
                Это важно, потому что чем меньше живет ветка — тем меньше шанс конфликтов (не только git, но и логических)
              • GitFlow препятствует rebase-ам, чтобы сохранить merge-коммиты.
                Да, их можно сохранять и при ребейзах, но команды Git Flow не делают этого.
              • GitFlow отрицает подход Contunious Delivery, считая, что каждый акт Delivery должен совершаться релиз-инженером, да и в целом можно увидеть, что он ориентирован только на долгий релизный цикл.
              • GitFlow не дружит с микросервисами поверх мультирепозиториев (впрочем, тут вообще мало что подходит, это идея, которая всегда плохо заканчивается)
              • Но проблема GitFlow в том, что он и с монорепозиториями тоже не дружит.


                Я сам об это споткнулся в процессе дизайна пайплайнов CI: GitFlow чудовищно мешает, когда работает поверх монорепозитория с несколькими deliverables, например, когда в одном репозитории отдельно и бэкэнд, и фронтэнд — уже из-за того, что он позволяет докоммичивать в релизные ветки, могут возникнуть конфликты при обратном мердже, если в один момент времени существует больше, чем одна релизная ветка. Да даже если одна, все равно плохо — в таких условиях надо патчить в принципе релизные механизмы GitFlow, чтобы хоть как-то заработали отдельные релизы сущностей.



              Так что делать-то?

              Читать дальше →
            • Полная домашняя автоматизация в новостройке. Продолжение

                Неожиданно статья про мой опыт автоматизации однокомнатной квартиры площадью 41 кв. м. в новостройке, опубликованная две недели назад, стала популярна и на 10 марта её добавил в закладки 781 image человек, просмотрели 123 921 раз и Хабр даже запилил рекламный блок в разделе «Рекомендуем» с пометкой «Интересно».


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

                Перед вами продолжение истории, где я отвечу на комментарии, приведу фотографии квартиры с мебелью, получившиеся электрические щиты, а также расскажу о тех сложностях, с которыми я столкнулся после того, как перешёл c openHAB в другую систему домашней автоматизации — Home Assistant.
                Самая умная однушка ...
              • Пишем блог на микросервисах – часть 1 «Общее описание»

                В этой статье хочу поделится нашими c SergeyMaslov наработками решения типовых задач с использованием микросервисной архитектуры на примере задачи «создание блога» (в надежде, что читатель представляет как устроен блог и это не должно вызывать вопросов по функциональности:)
                Читать дальше →
              • Front-end додзё: проекты для тренировки навыков разработчика (5 новых + 43 старых)

                • Translation

                1. Клон Notion


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

                image

                www.notion.so

                Чему вы научитесь, создавая клон Notion:

                • HTML Drag and drop API. Пользователь может «схватить мышкой» draggable элемент и поместить его в droppable зону.
                • Как синхронизировать в режиме реального времени данные между компьютером и смартфоном.
                • Мы позволяем пользователям создавать, читать, обновлять и удалять записи, тем самым мы тренируем CRUD-навыки.

                Читать дальше →
                • +13
                • 25.4k
                • 7
              • Свой облачный хостинг за 5 минут. Часть 0: Виртуализация



                  Привет Хабр! Я опубликовал уже три части из цикла статей (раз, два, три), а тут часть 0, как снег на голову. Как же так? Всё дело в том, что виртуализация является опциональной при построении нашего хостинга. Эта статья — самодостаточна, она не связана с другими частями из цикла. Вы вообще можете их не читать, если просто хотите разделить ваш выделенный сервер на несколько виртуальных машин.

                  Всё что я буду рассказывать может выполнить обычный программист в течение 5 минут, просто запустив набор сценариев для Ansible, которые я подготовил специально для вас и выложил на GitHub.
                  Читать дальше →
                  • +6
                  • 34.2k
                  • 2
                • Разработка с Docker на Windows Subsystem for Linux (WSL)




                  Для полноценной работы с проектом на docker'е в WSL необходима установка WSL 2. На момент написания заметки ее использование возможно только в рамках участия в программе предварительной оценки Windows (WSL 2 доступна в сборках 18932 и выше). Так же отдельно стоит упомянуть, что необходима версия Windows 10 Pro для установки и настройки Docker Desktop.


                  Важно! В WSL 2 пропала острая необходимость в Docker Desktop для Windows 10. Как обходиться без него описано в пункте Про Docker в Ubuntu.


                  Читать дальше →
                • Подходы к управлению модулями в Angular (и не только)

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


                  И одна из проблем, к которой можно прийти — неэффективное использование Angular модулей, в частности — излишне перегруженный app модуль: создали новую компоненту, забросили в него, сервис — тоже туда. И вроде всё здорово, всё работает. Однако со временем такой проект станет тяжело поддерживать и оптимизировать.


                  Благо, Angular предоставляет разработчикам возможность создавать свои модули, и ещё называет их feature модулями.



                  Читать дальше →
                • Тайная вечеря разработчиков

                    Казалось бы, в небольших командах разработки (20+ человек) не должны возникать проблемы с разобщённостью, работой над общим кодом и принятием технических решений. Но все мы знаем, что это не так (не говоря уже о командах вроде нашей, где 80+ человек). Три года назад для их решения мы начали проводить еженедельную внутреннюю конференцию разработчиков DevForum. Под катом вы узнаете про то, как он помогает нам, почему не всегда подходят другие форматы (вроде еженедельных встреч или Sprint Review) и инструкцию по его созданию.


                    Читать дальше →
                  • Тренды программирования: чего можно ожидать в 2020 году?

                    • Translation
                    Как бы безумно это не звучало, но 2020 год наступит уже очень скоро. «2020 год» — это похоже на фразу из научно-фантастического романа. Но это не фантастика. Нас от этой даты отделяет всего несколько месяцев.



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

                    Лучший способ предсказать будущее — это создать его.
                    А. Линкольн
                    Читать дальше →
                  • Как технологии IoT изменят мир в ближайшие 10 лет



                      29 марта в нижегородском технопарке «Анкудиновка» iCluster организовал лекцию Тома Рафтери (Tom Raftery), футуриста и IoT-евангелиста компании SAP. Бренд-менеджер веб-сервиса Smarty CRM познакомился с ним лично и узнал о том, что как и какие инновации проникают в повседневную жизнь и что изменится через 10 лет. В этой статье мы хотим поделится основными идеями из его выступления. Интересующихся прошу под кат.
                      Читать дальше →
                    • Каждый может с легкостью выучить английский язык



                        Всем hi! В эфире снова я — Владимир Адошев. Помимо путешествий, блоггинга и урбанистики я сильно увлекаюсь лингвистикой и различными европейскими языками. Я говорю свободно на английском и немецком языке, имею начальный уровень в испанском и французском.

                        Сегодня я поделюсь своим опытом об английском языке.

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

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

                        Я составил для вас памятку, которая обязательная поможет в изучении английского. Самая радостная новость: английский можно освоить полностью комфортно и не прилагая адских усилий.
                        Читать дальше →
                      • REST-сервисы на ASP.NET Core под Linux в продакшене

                          В основе этой статьи доклад Дениса Иванова (@DenisIvanov) на РИТ++ 2017, в котором он поделился опытом разработки и запуска в продакшен REST-сервиса на ASP.NET Core на Kubernetes. На текущий момент это сделать уже можно без особенных проблем и бояться использовать .NET Core, судя по опыту 2ГИС, не стоит.

                          Конфигурация: ASP.NetCore на Linux позволила не только использовать существующую on-premise платформу, но и принесла еще несколько дополнительных плюсов, в частности, в виде полноценных Docker и Kubernetes, которые сильно упрощают жизнь.



                          О сервисе


                          С 1 апреля 2017 года в продуктах 2ГИС появилась иконка, на которую можно нажать и начнет проигрываться видео. Рекламодатели, которые размещаются в справочнике, теперь могут купить новый способ размещения рекламы, а все продукты нашей компании (мобильные, онлайн, API), ходят на сервис, про который я буду сегодня рассказывать.

                          Топология этого сервиса примерно представлена на картинке ниже. Сервис помечен облачком в центре, он, по сути дела, является бэкендом для продуктов. Когда продукт приходит и говорит: «Дай мне для этого рекламодателя всю информацию о видеорекламе», сервис ему послушно ее отдает. Это информация такого плана: такая-то обложка лежит на таком-то CDN, такой-то видеофайл в таких-то разрешениях лежит там-то и там-то, само видео длится такое количество времени и прочее.


                          Осторожно: много информации и кода.
                          Читать дальше →
                        • Корпоративные фрукты

                            — Прошу внимания, коллеги. – директор постучал карандашом по столу. – Нам предстоит интересное мероприятие.

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

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

                            — Мда. – улыбнулась HR. – Весьма странный субъект. Подозреваю, это будет что-то… Хотя думаю, на работу мы его не возьмем.

                            — Почему? – спросил коммерческий.

                            — Сейчас сам увидишь. Он утверждает, что может какими-то там программистскими, или… — HR подняла со стола бумажку, пробежалась глазами. – Да, вот… Инженерными методами повысить эффективность бизнеса. В том числе, прибыль.

                            — Откуда такое чудо? – коммерческий удивленно улыбнулся.

                            — Из деревни какой-то… — HR снова глянула в бумажку. – Написано – Курган. Это где?

                            — Там, где волки срать боятся. – подхватил общее настроение главный инженер. – Бывал я там, на практике. Еле жив остался, в девяностые дело было…

                            — Ну что, зовем? – перебил директор.

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

                            — Это, парни. – сказал он извиняющимся тоном. – Простите за беспокойство, я передумал. Мне ваша компания не подходит. До свидания.
                            Читать дальше →
                          • Игра в Бога, или как я «Волчий остров» писал

                              Давным-давно, когда я еще учился в университете, я услышал что на математическом факультете в нашем вузе программистам задают интересную задачу: смоделировать так называемый «волчий остров». Суть ее примерно в следующем.



                              Что на картинке
                              Stop/Start — Запустить мир
                              Turn — Остановить мир
                              Restart — Пересоздать мир
                              Зеленые клетки — Клетки с травой. Чем зеленее, тем больше травы.
                              Маленькие зайцы и волки — щенки
                              Большие зайцы и волки — взрослые особи
                              Красные и синие полоски на пиктограммой зверей — текущая сытость. Красные — самцы, синие — самки.
                              Число в левом нижнем углу каждой клетки — количество существ на данной клетке
                              Внизу общее количество зайцев и волков, а также время, занявшее обработку последнего ход
                              Читать дальше →