• Тестирование с использованием Puppeteer


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


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

      Читать дальше →
    • Паттерн порталов в Angular: для чего нужен root-компонент в Taiga UI

        Мой коллега Роман недавно объявил о выходе нашей новой библиотеки компонентов под Angular Taiga UI. В инструкциях Getting started сказано, что приложение нужно обернуть в некий tui-root. Давайте разберемся, что он делает, узнаем, как и зачем мы используем порталы и что это вообще такое.

        Разобраться
        • +20
        • 1,2k
        • 4
      • Open-Closed Principle в Angular

          Всем привет! Меня зовут Вова, я фронтендер в Тинькофф. Сейчас перед нашей командой стоит задача редизайна функциональности на пересечении нескольких продуктов. Данная ситуация заставила нас задуматься во-первых о DDD, а во-вторых о гибкости наших решений, применяемых при разработке, и достичь этого нам помогли принципы SOLID, а точнее OCP и Dependency Inversion (не путать с Dependency Injection), о чем и хочется дальше поговорить.

          Читать далее
          • +25
          • 3,7k
          • 1
        • Оптимизация размера Go-бинарника

            image Если вы когда-нибудь писали на Go, то размер получающихся бинарников не мог пройти мимо вашего внимания. Конечно, в век гигабитных линков и терабайтных дисков это не должно быть большой проблемой. Но все-таки встречаются ситуации, когда хочется, чтобы размер бинарника был как можно меньше, и при этом вы не хотите расставаться с Go. О вариантах, как сделать так, чтобы Go-бинарник “похудел”, пойдет речь ниже.

            Читать дальше →
          • Готовим console.log() правильно

            • Перевод
            Специально к старту нового потока курса «Frontend-разработчик» делимся с вами полезным переводом. Автор рассказывает, как использует методы логирования в производственной среде собственного проекта и в чём именно они помогают. Кроме того, нас знакомят с платформой AppSignal, созданной, чтобы напрямую уведомлять разработчика о возникающих у пользователя исключениях в приложении. Подробности под катом.

            Приятного чтения!
            • +19
            • 8,9k
            • 6
          • Как я хотел разнообразить ретроспективы, а сделал собственную карточную игру

              Картинка с названием статьи

              В этой статье хочу поделиться своей историей геймификации ретроспективы: как с помощью придуманной мной карточной игры нам удалось разнообразить процесс, сделать встречу нескучной и вовлечь в обсуждение всех участников команды. А также расскажу о нюансах печати своих карточек для игр.
              Читать дальше →
              • +14
              • 3,2k
              • 4
            • Оптимизация работы с PostgreSQL в Go: от 50 до 5000 RPS

                Привет, меня зовут Иван, и я делаю Авито Доставку. Когда пользователь покупает товар с доставкой, мы показываем ему список отделений служб доставки с ценами. Цена доставки может меняться от отделения к отделению. Мы смотрим на область карты, где покупатель ищет товар и информацию по объявлению, например, координаты продавца, вес и размеры товара. И на выходе показываем человеку список отделений с адресами и ценой доставки в каждое из них.


                В ходе разработки калькулятора цены доставки возникла такая задача: есть структура базы данных PostgreSQL и запрос к ней от сервиса на Go. Нужно заставить всё это работать достаточно быстро. В итоге нам удалось поднять пропускную способность сервиса с 50 до 5000 RPS и выявить пару нюансов при общении сервиса с базой. Об этом и пойдёт рассказ.


                Читать дальше →
              • Компоненты-агностики в Angular

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


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


                  bruce lee

                  Читать дальше →
                  • +22
                  • 10,2k
                  • 6
                • Превращаем реактивные формы Angular в строго типизированные за одну минуту

                  Привет, Хабр! Представляю вашему вниманию перевод статьи "Convert into Strongly Typed Angular Forms in a Minute" автора Ajay Ojha.



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

                  Читать дальше →
                • Возможности Angular DI, о которых почти ничего не сказано в документации

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

                    Читать далее
                    • +31
                    • 6,6k
                    • 9
                  • История от первого лица: Наш стартап по разработке и изготовлению детских конструкторов из фанеры

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


                    Читать дальше →
                  • Архитектура интерпрайз-приложений может быть другой

                      image


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


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


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

                      Читать дальше →
                    • 5 советов для прокачки своих навыков в Angular

                        Этим летом мы с Ромой запустили серию твитов с полезными советами и приемами по Angular. Сообщество тепло встретило эту инициативу, и я решил написать обобщающую статью.

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

                        Читать далее
                        • +26
                        • 8,3k
                        • 9
                      • Как писать хорошие библиотеки под Angular

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


                          Angular — превосходная платформа с одними из лучших инструментов во фронтэнд-среде. И, конечно, есть определенный способ делать «по-ангуляровски». Что лично мне особенно нравится в этом фреймворке — это то чувство удовлетворенности, которое испытываешь, когда все сделано как надо: аккуратный код, четкая архитектура. Давайте разберемся, что делает код правильно написанным под Angular.


                          Читать дальше →
                          • +28
                          • 5,4k
                          • 5
                        • Советы руководителю от руководителя

                          Привет, Хабр! Я управляю командами разработки уже 10 лет.

                          Недавно меня попросили поделиться на внутренней конференции «секретами управления» с другими руководителями. Поводом стала низкая текучка в моём подразделении и здоровый дух внутри команды — так было на всех моих работах. Я отказался, сославшись на то, что не делаю для этого ничего особенного. Сработала внутренняя установка «не будь выскочкой».

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

                          Поэтому выключаю тумблер «не будь выскочкой» и делюсь «секретами».



                          Тут не будет стандартных «делегируй», «налаживай процесс», «стой в правильной позе на стендапе» — об этом написано уже достаточно. Будет о другом.
                          Читать дальше →
                        • Расследование: создатель AlterOffice украл код у Microsoft и рвётся назад в реестр



                            Полгода назад я опубликовал на Хабре статью, в которой доказал наличие клонов иностранных программ в реестре российского ПО. Мое расследование вызвало ажиотаж (даже на ютубе), и поделку компании ООО «Алми Партнер» спешно выпилили из реестра.

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

                            Я удивился их дерзости, и решил снова поковырять AlterOffice, и вот что я выяснил: создателям AlterOffice показалось мало бесплатной «либры», и они позаимствовали интеллектуальную собственность еще и у Microsoft, Mozilla и Paratype. Под катом вас ждёт очень много букв, картинок и выводов.
                            Читать дальше →
                          • А почему мы не пишем код в контроллерах?

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

                              image
                              Читать дальше →
                            • Как мы переучивали поддержку разговаривать по-человечески, и что получилось



                                Поддержка разговаривала с пользователями сухо, коротко и официально. Пользователи обижались. Например, вот:
                                Клиент: Привет, как поднять VPN на сервере?
                                Поддержка: Ваш сервер в порядке, мы не занимаемся серверным администрированием [закрывает тикет].

                                Поддержка права? Права. Но клиент обиделся. Потому что можно было то же самое написать нормально:
                                Клиент: Привет, как поднять VPN на сервере?
                                Поддержка: Добрый день! Я не могу помочь вам настроить VPN, потому что мы оказываем поддержку только в случае, если что-то не работает на нашей стороне. Но у нас есть статья в базе знаний, как просто поднять VPN. Спасибо за обращение [закрывает тикет].

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

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

                                • Как вежливо ответить, если помогать не будем.
                                • Как убрать бюрократизм из ответов.
                                • Нужно не забывать извиняться, если проблема была на нашей стороне.
                                • Как отвечать по делу, а не «вы находитесь на воздушном шаре».
                                • Почему уважение — это не слово «уважаемый» в начале.
                                • Почему надо говорить о своих действиях в процессе.
                                • Почему вообще надо писать по-человечески.
                                Читать дальше →
                              • Переносим Angular проект на ESLint, с Prettier, Husky и lint-staged

                                • Tutorial
                                Привет, Хабр! Меня зовут Богдан, я работаю в ПИК Digital Front-End тимлидом. Большую часть проектов мы разрабатываем на Angular и недавно я решил пересмотреть наши стайл гайды, а также добавить новые инструменты для более удобной работы.

                                В качестве линтера я решил использовать ESLint, так как в скором времени на него планируют перевести Angular. И в этой статье я хочу поделиться инструкцией по переходу с TSLint на ESLint, а заодно рассказать, как запускать Prettier из ESLint, как добавить правила стайл гайда AirBnB, и как сделать линтинг удобным и незаметным с помощью настройки VS Code и Git хуков.
                                Читать дальше →
                                • +10
                                • 6,3k
                                • 5
                              • Новое приложение «Медузы». Почему Flutter?

                                  Технический директор Борис Горячев рассказывает, как «Медуза» работала над ним целый год и почему оно написано на Flutter


                                  12 мая состоялся релиз новых мобильных приложений «Медузы» (iOS, Android) — почти через два года после того, как мы решили их переписать. Почему так долго? Почему не нативные приложения? Почему именно Flutter? Обо всем этом рассказывает технический директор «Медузы» Борис Горячев.


                                  Читать дальше →