Pull to refresh
3
0
Леонид @lkoida

Web developer

Send message

Базовые принципы UX для frontend-разработчика

Level of difficultyEasy
Reading time9 min
Views16K

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

Дизайн превью: Марина Четвертакова

Читать далее
Total votes 7: ↑6 and ↓1+6
Comments6

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

Reading time6 min
Views46K


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

Total votes 60: ↑58 and ↓2+56
Comments25

Явное управление ресурсами: пробуем новую фичу JavaScript и TypeScript

Level of difficultyHard
Reading time13 min
Views17K

Одной из самых интересных грядущих новинок JavaScript и TypeScript для меня является явное управление ресурсами. Новый синтаксис using foobar = … реализует идиому RAII, позволяя писать намного менее многословный код, управляющий какими-либо ресурсами.

В этой статье я хочу на примерах разобрать эту фичу — в том виде, в котором она сейчас доступна в TypeScript 5.2.0-beta с полифиллом disposablestack. Я рассмотрю синхронные и асинхронные ресурсы, DisposableStack/AsyncDisposableStack, а также приведу пример неочевидного бага, в который попался я сам. По пути я также коснусь нескольких других нововведений Node.js, про которые, возможно, ещё знают не все. Весь код доступен в репозитории.
Читать дальше →
Total votes 65: ↑65 and ↓0+65
Comments6

Вывод типов в TypeScript. Неизменяемый массив конкретных строковых значений

Level of difficultyEasy
Reading time2 min
Views6.2K

Решим реальную практическую задачу, с которой мне пришлось столкнуться на моем проекте React/TypeScript.

Задача

У нас есть массив конкретных строковых значений, таких как "first", "second", "third", "fourth" и "fifth". Необходимо отобразить их на странице, т.е как-то использовать, а также убедиться, чтобы эти данные были строго типизированы и TypeScript нам выдавал всплывающие подсказки при их использовании в коде.

Читать далее
Total votes 20: ↑17 and ↓3+16
Comments25

Полное руководство по логированию в Node.js с помощью Pino

Level of difficultyEasy
Reading time37 min
Views14K

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

Pino — это мощная платформа ведения логов для Node.js, обладающая молниеносной скоростью и широкими возможностями. Фактически именно скорость Pino и завоевала ему место логгера по-умолчанию в open-source веб-сервере Fastify. Также Pino способен очень просто интегрироваться с другими Node.js-фреймворками, что делает его лучшим выбором для всех разработчиков, ищущих надежное и гибкое решение для ведения логов.

Читать далее
Total votes 13: ↑12 and ↓1+16
Comments1

Где решать задачи по программированию, чтобы пройти путь from zero to hero

Level of difficultyEasy
Reading time4 min
Views113K

Если вам о чём-то говорят фамилии Зив, Хомченко и Рымкевич, иди сюда, дай обниму, бедолага-олимпиадник, то вы наверняка знаете, как важно прорешивать задачи для полноценного, осознанного и глубокого понимания изученного материала. Когда нет или совсем мало реальной практики, задачи дают возможность покрыть практикой все теоретические знания, погрузиться в неожиданные выводы, сложности, баги, препятствия. Более того, даже если практики достаточно, задачи помогают относительно быстро, комплексно и глубоко проработать типичные и нетипичные ситуации, возникающие в разработке (любой другой науке). Это всегда безопасный (никто не взрывает лабораторию и не роняет прод), доступный и удобный способ подробно разобраться в предмете. Определённо, программирования это касается в первую очередь.

Читать далее
Total votes 42: ↑41 and ↓1+65
Comments25

Когда НЕ нужно использовать Apache Kafka?

Level of difficultyMedium
Reading time18 min
Views10K
image

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


В статье, перевод которой мы подготовили, автор Kai Waehner постарается ответить на эти вопросы. В отдельных главах приводится объяснение, когда стоит использовать Kafka, когда — нет, а когда — возможно.

Читать дальше →
Total votes 19: ↑15 and ↓4+15
Comments0

30 фильмов про IT и киберпанк, которые можно пересмотреть на новогодних праздниках

Reading time10 min
Views53K
На новогодних праздниках можно позволить себе отдохнуть и посмотреть старое и новое кино. Фильмы про IT подбирал так, чтобы можно было найти на любой вкус. Ниже список, которым решил с вами поделиться.

Читать дальше →
Total votes 49: ↑32 and ↓17+28
Comments99

TypeScript в React-приложениях. 1. Как типизировать данные

Reading time7 min
Views17K

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

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

Читать далее
Total votes 7: ↑6 and ↓1+5
Comments9

Перегрузка функций в TypeScript

Reading time8 min
Views32K

Перегрузка функций — это та область TS, которая находится в невидимой зоне для разработчиков, которые изучали JS, а потом на работе «на ходу» начали осваивать TS. Особенно, если изучение JS не было связано с университетом или любым другим фундаментальным образованием. Если вы изучали JS на курсах, то вы никогда не услышите там про перегрузку функций, просто потому что в JS этого функционала нет. А когда вы сами начнете изучать TS, то вы не наткнетесь на перегрузку функций, просто потому что даже не подозреваете о ней. Если, прочитав вступление, вы задались вопросом «Что за перегрузка такая?», то эта статья для вас.

Читать далее
Total votes 18: ↑18 and ↓0+18
Comments18

Как мы переходили на React-router v6: подводные камни и альтернативы

Reading time8 min
Views18K

Мы перешли на шестую версии React-router. Это помогло нам решить несколько проблем, например, определение маршрутов в Switch рендерит точный маршрут, а не первое совпадение, а размер бандла уменьшился в 2 раза.  

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

Читать далее
Total votes 18: ↑18 and ↓0+18
Comments13

Любопытные CSS фишки 2022 года

Reading time8 min
Views16K

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

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

Читать далее
Total votes 13: ↑9 and ↓4+7
Comments11

Память в браузерах и в Node.js: ограничения, утечки и нестандартные оптимизации

Reading time32 min
Views43K

Интро: почему я написал эту статью


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



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


Разрабатывая проект на JavaScript (TypeScript, ClojureScript или каком-то другом языке, транслируемом в JavaScript), мы привыкли создавать объекты, массивы, строки и вообще писать код, как будто память бесконечна. Это не так. Я расскажу о видах проблем с памятью, о том, какие ограничения мы часто забываем и как их можно преодолеть. В ответ браузеры и пользователи скажут вам спасибо.


Читать дальше →
Total votes 55: ↑55 and ↓0+55
Comments12

Горячие клавиши в терминале Linux

Reading time5 min
Views63K

Давным-давно, такие слова как "hot keys" и "keyboard shortcuts" мне не всегда удавалось перевести на русский без потери лица. Как-то раз, я написал "клавиатурные сокращения", чем сразу же привлёк косые взгляды и вызвал смелые медицинские фантазии... Но вроде бы сейчас принято везде говорить и писать "горячие клавиши". О них и поговорим.

Данная заметка — шпаргалка по линуксовой оболочке Bash. Если вам приходится часто иметь дело с терминалом в Linux (и вы не меняли Bash на другой шелл), то будет очень полезно использовать эти самые "сокращения" на благо себе и в мирных целях. Текст написан для начинающих пользователей, но кто знает — может быть и вы найдёте в нём что-то новое и полезное для себя.

Для удобства будем считать, что по умолчанию под терминалом мы понимаем стандартную в настольной редакции Ubuntu программу "Терминал Gnome".

Ну, понеслась!
Total votes 20: ↑11 and ↓9+4
Comments15

Node.js: разрабатываем пакетный менеджер

Reading time15 min
Views5.9K



Привет, друзья!


Вам когда-нибудь хотелось узнать, как под капотом работают пакетные менеджеры (Package Manager, PM) — интерфейсы командной строки (Command Line Interface, CLI) для установки зависимостей проектов наподобие npm или yarn? Если хотелось, тогда эта статья для вас.


В данном туториале мы разработаем простой пакетный менеджер на Node.js и TypeScript. В качестве образца для подражания мы будем использовать yarn. Если вы не знакомы с TS, советую взглянуть на эту карманную книгу.


Наш CLI будет называться my-yarn. В качестве lock-файла (yarn.lock, package-lock.json) он будет использовать файл my-yarn.yml.


Источник вдохновения.


Код проекта.

Читать дальше →
Total votes 7: ↑7 and ↓0+7
Comments2

Что такое Netcat? Bind Shell и Reverse Shell в действии

Reading time5 min
Views41K

Друзья, всех приветствую!

В этой статье мы поговорим о том, что такое Netcat и с помощью него реализуем Bind и Reverse Shell соответственно.

Netcat

Netcat, впервые выпущенный в 1995 году (!), является одним из "оригинальных" инструментов тестирования на проникновение в сеть. Netcat настолько универсален, что вполне оправдывает авторское название "швейцарский армейский нож" хакера. Самое четкое определение Netcat дают сами разработчики: "простая утилита, которая считывает и записывает данные через сетевые соединения, используя протоколы TCP или UDP".

Подключение к порту TCP/UDP

Как следует из описания, Netcat может работать как в режиме клиента, так и в режиме сервера. Для начала давайте рассмотрим клиентский режим. Мы можем использовать клиентский режим для подключения к любому порту TCP/UDP, что позволяет нам: Проверить, открыт или закрыт порт или подключиться к сетевой службе.

Давайте начнем с использования Netcat (nc), чтобы проверить, открыт ли порт 80 на тестируемой машине (в качестве тестируемой машины мы будем использовать основную машину на которой установлена ВМ !!!).

Мы введем несколько аргументов: опцию -n, чтобы отключить DNS и поиск номеров портов по /etc/services; -v для вывода информации о процессе работы; IP-адрес назначения; и номер порта назначения:

P.S. Чтобы узнать IP-адрес основной машины выполните команду ipconfig в командной строке если у вас основная машина Windows, и ifconfig если у вас Linux или MacOS.

Читать далее
Total votes 8: ↑6 and ↓2+6
Comments7

Готовимся к собеседованию по PHP: Что такое «DI», «Container», «Auto-wiring» за семь простых шагов

Reading time10 min
Views42K

Статья написана для начинающих разработчиков на языке PHP, чтобы помочь им усвоить понятия, нужные для понимания того, как устроены и работают современные фреймворки на PHP: Dependency Injection, Container, Auto-wiring.

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

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

Читать далее
Total votes 19: ↑16 and ↓3+15
Comments13

Как правильно готовить автоматизацию или Что покрывать тестами в первую очередь

Reading time9 min
Views16K
Привет, это Эрик Бурыгин, я техлид курса «Автоматизатор тестирования на Java» в Яндекс.Практикуме и лид в Яндексе. Каждый ручной тестировщик считает, что автоматизация — это круто и её непременно нужно втащить в проект. Что может быть лучше, чем полное покрытие автотестами продукта, когда тесты гоняются 24/7 и отлавливают баги? Вот прочитал я эти строки, и захотелось ещё раз всё заавтоматизировать!



Но, как это часто бывает, при внедрении автоматизации вы тратите много человеческих ресурсов, а профита долгое время не видно. Возникает вопрос о целесообразности этой инициативы. То, что на первых этапах автоматизация отнимает много сил — вполне нормально, но в перспективе она должна экономить время, а не наоборот. Попробуем понять, как этого добиться.
Читать дальше →
Total votes 7: ↑6 and ↓1+5
Comments2

Десятикратное улучшение производительности React-приложения

Reading time6 min
Views12K

image


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


Около года назад в Techgoise я получил возможность поработать с большим React-приложением. Мы получили (унаследовали) готовую кодовую базу, внесли основные правки и начали добавлять в приложение новые интересные возможности.


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


В данной статье я расскажу о том, как нам удалось добиться уменьшения этой цифры с 1,5 Гб до 150 Мб, что, как следствие, привело к улучшению производительности почти в 10 раз, и мы больше никогда не сталкивались с Ошибкой.


Поиск узких мест в производительности


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


1. Профилирование компонентов с помощью расширения для Google Chrome

Читать дальше →
Total votes 28: ↑21 and ↓7+19
Comments13

Выкладка нетрадиционной ориентации

Reading time4 min
Views10K


Все, кому приходится иметь дело с вёрсткой, знают что гриды и flexbox давно захватили CSS, позволяют очень удобно организовать классическую выкладку хедер-контент-сайдбар-футер, списки карточек, masonry и так далее. Но их настоящая крутизна не в удобстве использования, а в бескрайних возможностях, которые они открывают. Я покажу и объясню мой любимый трюк, который позволяет верстать за рамками привычной вертикально-горизонтальной прямоугольной сетки, и выглядит это очень круто.
Total votes 28: ↑27 and ↓1+37
Comments2

Information

Rating
Does not participate
Registered
Activity