Как стать автором
Обновить
0
0
Евгений @bywanted

Пользователь

Отправить сообщение

Типизированные формы в Angular

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров5.2K

Всем привет! В июне 2022 года наша фронтенд команда наконец-то дождалась строго типизированных форм от разработчиков Angular! Через какое-то время мы заметили что не все работает так, как интуитивно ожидаешь. Позже я создал небольшой внутренний документ с “фишками”, которые явно не описаны в официальных доках. И подумал: “А почему бы мне не выложить наш небольшой гайд на Хабр?”. И вот, выкладываю.

Читать далее
Всего голосов 10: ↑10 и ↓0+10
Комментарии5

Web API для Angular

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров4.8K

Веб — богатая экосистема с массой мощных API, которая только пополняется. В нашем распоряжении уже знакомые инструменты — Canvas или Intersection Observer, но в 2023 мы также имеем Web MIDI API, Speech Recognition и даже такие экзотические штуки, как геймпады и VR прямо в браузере. Естественно, эти API сложно использовать в Angular из-за разницы парадигм нативного JavaScript и декларативного Angular. Вот тут и появляемся мы!

Читать далее
Всего голосов 17: ↑17 и ↓0+17
Комментарии0

ContentChild, ViewChild, template reference variables

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров12K

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

Давайте!
Всего голосов 15: ↑15 и ↓0+15
Комментарии2

MinIo для самых маленьких

Время на прочтение7 мин
Количество просмотров190K
MinIO — прекрасное решение, когда надо легко и просто организовать объектное хранилище. Элементарная настройка, множество платформ и хорошая производительность сделали своё дело на ниве народной любви. Так что у нас не было другого пути, как месяц назад заявить о совместимости Veeam Backup & Replication и MinIO. Включая такую важную функцию, как Immutability. На самом деле у MinIO есть целый раздел в документации, посвящённый нашей интеграции.

Поэтому сегодня мы поговорим о том, как:

  • Настроить MinIO очень быстро.
  • Настроить MinIO чуть менее быстро, но значительно качественней.
  • Использовать его в качестве Archive Tier для масштабируемого репозитория Veeam SOBR.


Читать дальше →
Всего голосов 12: ↑11 и ↓1+16
Комментарии28

Знакомство с Go — пишем граббер веб страниц с многопоточностью и блудницами

Время на прочтение11 мин
Количество просмотров70K
Про язык Go от команды Google слышали, наверное, все. А вот пробовали далеко не все, и очень зря — общение с сусликами Go это море удовольствия, в чем я недавно убедился на собственном опыте.
Начинать знакомство с новым языком забавнее всего на жизненном примере, поэтому я, не долго думая, взял первую попавшуюся задачу “из жизни, самой первостепенной важности”:

Есть в интернете сайт http://vpustotu.ru на котором любой желающий может анонимно высказаться о наболевшем. Все высказывания (в дальнейшем буду называть их “цитатами”) сначала попадают в модерацию (аналог “бездны” башорга), где посетители могут оценить полет мысли и проголосовать за цитату в стиле “Ого!” или “Ерунда!”. На странице модерации (http://vpustotu.ru/moderation/) нам показывают случайную цитату, ссылки голосования и ссылку “Еще”, которая ведет на эту же страницу. Пощелкайте, это все очень просто.

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

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

Таким образом нужна программа, которая:

  • Должна последовательно обновлять и парсить (разбирать) страницу, записывая цитату.
  • Должна уметь отбрасывать дубликаты.


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

  • Должна останавливаться не только по команде, но и по достижению определенного числа “повторов”, например 500!
  • Так как это, скорее всего, займет некоторое время: необходимо уметь продолжить “с места на котором остановились” после закрытия.
  • Ну и раз уж все-таки это надолго – пусть делает свое грязное дело в несколько потоков. Хорошо-бы в целых 4 потока (или даже 5!).
  • И отчитывается об успехах в консоль каждые, скажем, 10 секунд.
  • А все эти параметры пускай принимает из аргументов командной строки!


Ну, вроде все понятно. Пусть программа ведет два файла – с цитатами и с некими хешами этих цитат, чтобы не повторяться, и перечитывает файл в начале каждого запуска. Ну а дальше в цикле разбирает страницу, выдергивая все новые и новые откровения, пока не получит ctrl-c по лбу или же не встретит определенное количество повторов. Задача ясна, план есть – поехали!
Читать дальше →
Всего голосов 78: ↑74 и ↓4+70
Комментарии30

Обратный websocket/http туннель данных на .NET + SignalR

Время на прочтение3 мин
Количество просмотров4.7K

 

Возникла необходимость организовать трафик к внешнему сервису из сегмента с ограничением на исходящие соединения. Этот внешний сервис использовал одновременно множество tcp/udp сокетов. При беглом обзоре существующих утилит не обнаружил готовое решение инкапсуляции множества сокетов с поддержкой «обратного» соединения.

Читать далее
Всего голосов 5: ↑5 и ↓0+5
Комментарии6

Как переносить данные откуда угодно куда угодно с помощью Meltano

Время на прочтение8 мин
Количество просмотров2.8K

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

Источников данных много — Яндекс.Директ, Google Analytics и другие. По отдельности они не дают нужной картины, — данные всё равно приходится собирать в один Data Warehouse. Тут на помощь приходит Meltano: он позволяет стандартизировать написание коннекторов к различным источникам данных и быстро перенести все нужные данные.

Читать далее
Всего голосов 13: ↑12 и ↓1+11
Комментарии3

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

Время на прочтение6 мин
Количество просмотров38K

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

Читать далее
Всего голосов 31: ↑31 и ↓0+31
Комментарии10

Не отписался — без памяти остался

Время на прочтение5 мин
Количество просмотров8.5K

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

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

Читать далее
Всего голосов 8: ↑7 и ↓1+9
Комментарии4

Выселяем Carthage из git, или Как мы связали Carthage + Rome + S3 в нашем проекте

Время на прочтение9 мин
Количество просмотров1.2K


Сегодня для управления внешними зависимостями мы используем Carthage, это один из популярных в iOS-среде инструментов. Он умеет собирать зависимости из кэша, но не управлять его организацией и хранением. Для этого нужно задействовать сторонние инструменты, и мы расскажем, как решали задачу по работе с удалёнными зависимостями. Наш опыт может быть полезен всем, кто захочет пройти этот тернистый путь интеграции remote cache через связку Rome + Carthage + S3.
Читать дальше →
Всего голосов 28: ↑27 и ↓1+38
Комментарии6

Angular без CLI Туториал

Время на прочтение12 мин
Количество просмотров7.5K

Фреймворк Angular используется при создании SPA и предлагает большое количество инструментов как для создания, непосредственно, элементов интерфейса, так и CLI для создания и управления структурой файлов, относящихся к приложению.

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

Я задался таким вопросом, и, после изучения этого вопроса я собрал это в туториал.

Читать далее
Всего голосов 9: ↑9 и ↓0+9
Комментарии3

Дженерики в TypeScript

Время на прочтение10 мин
Количество просмотров135K

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

Эта статья для тех, кто не использует generic-типы в TypeScript: не знают о них, боятся использовать или используют вместо реальных типов — any.

Перестать везде использовать тип "any"
Всего голосов 49: ↑48 и ↓1+52
Комментарии16

TypeScript. Продвинутые типы

Время на прочтение16 мин
Количество просмотров54K
image

Привет, Хаброжители! Мы сдали в типографию очередную новинку
"Профессиональный TypeScript. Разработка масштабируемых JavaScript-приложений". В этой книге программисты, которые уже знакомы с JavaScript на среднем уровне, узнают, как освоить TypeScript. Вы поймете, как TypeScript поможет масштабировать код в 10 раз лучше и снова сделать программирование увлекательным.

Вашему вниманию представлен отрывок одной главы из книги «Продвинутые типы».
Читать дальше →
Всего голосов 17: ↑17 и ↓0+17
Комментарии1

Как быстро и удобно документировать Angular проект с помощью модуля AddOnDoc из TaigaUI

Время на прочтение5 мин
Количество просмотров5.2K

Не так давно вышла новая библиотека компонентов Taiga UI. Как говорят сами создатели Александр Инкин и Роман Седов, это конструктор Lego. И действительно: в нём есть много полезных модулей, которые можно использовать в своём проекте. В этой статье мы рассмотрим модуль AddOnDoc.

Читать далее
Всего голосов 8: ↑7 и ↓1+7
Комментарии2

Небинарный *ngIf

Время на прочтение3 мин
Количество просмотров6.9K

Вам когда-нибудь хотелось отобразить состояние загрузки, пока ngIf ждет ответа от async-пайпа? Или, может, вы мечтали передать в ngFor шаблон для пустого массива? Возможно, вы бросили это, потому что вам не хотелось реализовывать базовую логику этих директив самому. На самом деле в этом нет нужды! Один и тот же селектор может подцепить несколько директив, что позволяет расширить функциональность встроенных директив дополнительной логикой.

Читать далее
Всего голосов 24: ↑23 и ↓1+24
Комментарии2

Что готовит нам Angular? Заметки из changelog, новый синтаксис шаблонов, Ivy

Время на прочтение4 мин
Количество просмотров5.8K

В этой статье приведу заметки к релизу Angular 13. Рассмотрим предложения по шаблонам которую будут рассматривать в Angular Team в ближайшем митинге.

Читать далее
Всего голосов 8: ↑8 и ↓0+8
Комментарии3

Самосохраняющийся компонент выбора

Время на прочтение4 мин
Количество просмотров3.3K

Недавно Бхарат Рави опубликовал статью о директиве самосохраняющегося select-элемента на InDepth. Это интересная концепция изолирования логики в директиве, что в целом идея хорошая.

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

Поехали!
Всего голосов 17: ↑17 и ↓0+17
Комментарии4

Компоненты-конструкторы: мощь ng-content в Angular

Время на прочтение9 мин
Количество просмотров17K

Проекция контента — одна из базовых возможностей Angular, о которой слышали почти все. А с недавних пор по ней появилась и хорошая официальная документация. Тем не менее в реальных задачах разработчики часто обходят ng-content стороной, прибегая к более сложным и перегруженным решениям и усложняя дальнейшее использование и поддержку компонента.

В этой статье я хотел бы показать несколько типовых кейсов для ng-content при разработке многократно используемых компонентов. А еще — рассказать о преимуществах, которые они могут нам дать.

Давайте посмотрим
Всего голосов 30: ↑30 и ↓0+30
Комментарии1

Как работает JS: отслеживание изменений в DOM с помощью MutationObserver

Время на прочтение7 мин
Количество просмотров54K
Сегодня, в переводе десятого материала из серии, посвящённой особенностям работы механизмов JavaScript, мы расскажем о том, как отслеживать изменения в DOM с помощью API MutationObserver.

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



Всё это ведёт к усложнению задачи контроля состояния интерфейсов приложений в процессе их жизненного цикла. Эта задача становится ещё масштабнее в том случае, если речь идёт о разработке чего-то вроде фреймворка или даже обычной библиотеки, когда, например, нужно реагировать на то, что происходит со страницей и выполнять какие-то действия, зависящие от DOM.
Читать дальше →
Всего голосов 24: ↑22 и ↓2+20
Комментарии7

Angular 9. Перезапуск guard-ов текущей страницы. Trigger current route guards

Время на прочтение7 мин
Количество просмотров6K
Столкнулся с необходимостью перезапустить guard-ы для текущей страницы, вне зависимости от того какая страница открыта.

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

Описание кейса


Страницы приложения разделяются на 3 группы:

  • Только для авторизованных пользователей
  • Только для неавторизованных пользователей
  • Для любых пользователей

Авторизоваться или выйти можно на любой странице.

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

Если на странице без ограничений, то нужно остаться на текущей странице.
Читать дальше →
Всего голосов 8: ↑8 и ↓0+8
Комментарии2

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность