Media is too big
VIEW IN TELEGRAM
Девелоперы KAERI Robot создали настоящий ховерборд — это персональное мобильное устройство не только может перемещать по воздуху людей, но и доставлять грузы. Все благодаря паре дронов, которые служат воздушной подушкой.
Что дальше — карманный джетпак?
Что дальше — карманный джетпак?
Channel name was changed to «Ступень к становлению программистом»
⚡️Кастомизируем VS Code для веб-разработки
В статье расскажу, какие настройки и плагины VS Code использует наша команда фронтенда.
Читать...
В статье расскажу, какие настройки и плагины VS Code использует наша команда фронтенда.
Читать...
Хабр
Кастомизируем VS Code для веб-разработки
Почему VS Code? Привет, меня зовут Филипп, я фронтенд-разработчик в KTS . Visual Studio Code — это бесплатный, шустрый (что важно на больших проектах) и глубоко кастомизируемый редактор кода. Хотя...
Отключаем возможность копирования текста на нашем сайте
1) Отключаем контекстное меню, которое открывается кликом правой кнопкой мыши (остается возможность скопировать через Сtrl+С)
2) Заменяем буфер обмена своим текстом. Когда пользователь копирует текст, то буфер обмена устанавливается в "Не копировать!"
Также можно использовать CSS для отключения выделения текста:
1) Отключаем контекстное меню, которое открывается кликом правой кнопкой мыши (остается возможность скопировать через Сtrl+С)
2) Заменяем буфер обмена своим текстом. Когда пользователь копирует текст, то буфер обмена устанавливается в "Не копировать!"
Также можно использовать CSS для отключения выделения текста:
*{
user-select: none;
}
🧐Как работает ViewEncapsulation и ng-deep в Angular
В данной статье я попытаюсь максимально просто и сжато изложить все детали.
Читать...
В данной статье я попытаюсь максимально просто и сжато изложить все детали.
Читать...
Хабр
Как работает ViewEncapsulation и ng-deep в Angular
Перевод (а точнее оригинал) моей статьи опубликованной здесь Многие Angular разработчики и верстальщики, пишущие CSS/SCSS код в Angular-приложениях сталкивались с ситуацией, когда надо применить стили...
👨💻Как автоматизировать использование дизайн токенов с помощью Stylelint и PostCSS
В этой статье я расскажу об одной из таких проблем, которую я решил с помощью PostCSS + Stylelint, и о том, как я это сделал.
Читать...
В этой статье я расскажу об одной из таких проблем, которую я решил с помощью PostCSS + Stylelint, и о том, как я это сделал.
Читать...
Хабр
Как автоматизировать использование дизайн токенов с помощью Stylelint и PostCSS
Привет, Хабр! Меня зовут Саша и вот уже 7 лет я работаю фулстек разработчиком и пишу на C# и TypeScript/React. Сегодня я хотел бы поделиться своим небольшим успехом в автоматизации. В какой-то момент...
Как правильно выбрать нейросеть для рабочих задач и автоматизировать процессы в два клика? Какой бот поможет увеличить продуктивность на 200% без ущерба качеству? И когда начнётся восстание машин?
Наши любимые материалы:
1. Программа из 1960-х проходит тест Тьюринга успешнее, чем GPT-3,5.
2. OpenAI — Прометей или Пандора нашего времени?
3. Самые странные, экзотические и просто отбитые языки программирования.
4. Как транзисторы перевернули наш мир: большой спецпроект
5. Как программисту пройти собеседование. 6 советов.
Наши любимые материалы:
1. Программа из 1960-х проходит тест Тьюринга успешнее, чем GPT-3,5.
2. OpenAI — Прометей или Пандора нашего времени?
3. Самые странные, экзотические и просто отбитые языки программирования.
4. Как транзисторы перевернули наш мир: большой спецпроект
5. Как программисту пройти собеседование. 6 советов.
This media is not supported in your browser
VIEW IN TELEGRAM
Автозаполнение инпута
HTML-элемент <datalist> содержит набор опций (<option>), доступных для выбора. Выбранное значение будет установлено для элемента <input>
Пример:
Различия между <select> и <datalist>
Кроме функции автодополнения элемента <datalist>, основное отличие между <select> и этим тегом в том, что в элементе <select> нельзя выбрать или указать значение не из списка предлагаемых
HTML-элемент <datalist> содержит набор опций (<option>), доступных для выбора. Выбранное значение будет установлено для элемента <input>
Пример:
<label for="my-browser">Выберите браузер из списка:</label>
<input type="text" list="browsers" id="my-browser" name="my-browser">
<datalist id="browsers">
<option value="Chrome">
<option value="Firefox">
<option value="Yandex Browser">
<option value="Opera">
<option value="Safari">
<option value="Microsoft Edge">
</datalist>
Различия между <select> и <datalist>
Кроме функции автодополнения элемента <datalist>, основное отличие между <select> и этим тегом в том, что в элементе <select> нельзя выбрать или указать значение не из списка предлагаемых
Функция-псевдокласс :is()
В качестве аргумента принимает список селекторов и выбирает только те элементы, которые могут быть выбраны из переданного списка
:is() похож на :where() по своей механике, различие заключается в специфичности: у :where() она нулевая, а у :is() равна наиболее специфичному из переданных селекторов
Псевдоклассы :where() и :is() относятся к «прощающему списку селекторов». Невалидный селектор в списке аргументов не приведёт к игнорированию валидных селекторов
Стили ниже применятся к <span>, а нерабочий селектор :unsupported будет проигнорирован:
А вот если указать неподдерживаемое свойство :unsupported в перечислении, то всё сломается, не сработает ни один из селекторов:
В качестве аргумента принимает список селекторов и выбирает только те элементы, которые могут быть выбраны из переданного списка
:is() похож на :where() по своей механике, различие заключается в специфичности: у :where() она нулевая, а у :is() равна наиболее специфичному из переданных селекторов
Псевдоклассы :where() и :is() относятся к «прощающему списку селекторов». Невалидный селектор в списке аргументов не приведёт к игнорированию валидных селекторов
Стили ниже применятся к <span>, а нерабочий селектор :unsupported будет проигнорирован:
:is(span, :unsupported) {
color: red;
}А вот если указать неподдерживаемое свойство :unsupported в перечислении, то всё сломается, не сработает ни один из селекторов:
span,
:unsupported {
color: red;
}
CSS свойство inset
Свойство inset заменяет собой сразу четыре свойства: top, right, bottom и left. Позволяет указать смещение позиционированного элемента сразу со всех четырёх сторон
Свойство inset заменяет собой сразу четыре свойства: top, right, bottom и left. Позволяет указать смещение позиционированного элемента сразу со всех четырёх сторон
div {
inset: 10px; /* Все стороны - 10px /
}
div {
inset: 10px 20px; / Верхний и нижний отступ - 10px, правый и левый - 20px /
}
div {
inset: 10px 20px 30px; / Верхний отступ на 10px, правый и левый — на 20px, нижний - 30px /
}
div {
inset: 10px 20px 30px 40px; / Верхний отступ - 10px, правый - 20px, нижний - 30px, левый - 40px */
}
Поддержка свойства на данный момент составляет 93.96%Балансировка текста с помощью text-wrap: balance
Текст переносится так, чтобы наилучшим образом сбалансировать количество символов в каждой строке, что улучшает качество верстки и читабельность
Поддерживается только для блоков текста, содержащих ограниченное количество строк (в реализации Chromium используется до шести переносных строк), т.е. оно полезно для таких случаев, как заголовки или цитаты
Поддержка на данный момент составляет 65.04%, но вы можете спокойно пользоваться им, так как в браузерах, где оно не поддерживается, ничего не сломается
Текст переносится так, чтобы наилучшим образом сбалансировать количество символов в каждой строке, что улучшает качество верстки и читабельность
Поддерживается только для блоков текста, содержащих ограниченное количество строк (в реализации Chromium используется до шести переносных строк), т.е. оно полезно для таких случаев, как заголовки или цитаты
h1, h2, h3, h4, h5, h6, blockquote {
text-wrap: balance;
}Поддержка на данный момент составляет 65.04%, но вы можете спокойно пользоваться им, так как в браузерах, где оно не поддерживается, ничего не сломается
Работаете с бэкендом? Тогда вам будет интересно послушать, как облегчить создание новых продуктов в большой компании с помощью автоматизированной собственной PaaS для деплоя, девтулинга, кодогенерации и прочих радостей.
Именно об этом двенадцатый выпуск подкаста «Магнитное Поле», гостем которого стал Антон Огородников, руководитель разработки онлайн-платформы Магнита. Поговорили про эту Platform as a Service, созданную для облегчения жизни разработчиков внутри Магнита – это такой сборник автоматизированных блюпринтов для быстрого деплоя в облачную инфраструктуру. Кроме того, обсудили актуальный спор GoLang vs Python, какие стеки используются в Магните, а какие придется включить в ближайшее время, до какой степени можно кодогенерировать уже сейчас, как строится у них среда разработки и куда стоит двигаться новичку-бэкендеру.
«Магнитное Поле» создается совместно @zavtracast и IT-командой Магнита — в нем рассказывают про интересные аспекты работы самых разных команд. В предыдущих выпусках было про devops с человеческим лицом, дизайн-системы, data governance, IT HR, зачем нужен agile, geo BI, облачные архитектуры, InnerSource и многое другое.
🎧Послушать
📹Посмотреть
Именно об этом двенадцатый выпуск подкаста «Магнитное Поле», гостем которого стал Антон Огородников, руководитель разработки онлайн-платформы Магнита. Поговорили про эту Platform as a Service, созданную для облегчения жизни разработчиков внутри Магнита – это такой сборник автоматизированных блюпринтов для быстрого деплоя в облачную инфраструктуру. Кроме того, обсудили актуальный спор GoLang vs Python, какие стеки используются в Магните, а какие придется включить в ближайшее время, до какой степени можно кодогенерировать уже сейчас, как строится у них среда разработки и куда стоит двигаться новичку-бэкендеру.
«Магнитное Поле» создается совместно @zavtracast и IT-командой Магнита — в нем рассказывают про интересные аспекты работы самых разных команд. В предыдущих выпусках было про devops с человеческим лицом, дизайн-системы, data governance, IT HR, зачем нужен agile, geo BI, облачные архитектуры, InnerSource и многое другое.
🎧Послушать
📹Посмотреть
PC.ST
Магнитное поле №12 – Как оптимизировать опыт разработки с помощью собственной PaaS – Завтракаст (Zavtracast) – PC.ST
Рады представить вам уже двенадцатый выпуск подкаста “Магнитное Поле”!
В этом выпуске к нам присоединился Антон Огородников, руководитель разработки онлайн-платформы Магнита. Собственно, мы как раз и поговорили про эту своеобразную Platform as a Service…
В этом выпуске к нам присоединился Антон Огородников, руководитель разработки онлайн-платформы Магнита. Собственно, мы как раз и поговорили про эту своеобразную Platform as a Service…
TypeScript 5.0 - Функции декораторы
Всем привет! Сегодня хотел бы рассказать о довольно свежей фиче в TS.
И так, что это за функция декоратор?
Это обыкновенные функции, которые позволяют добавить дополнительное поведение классу, методу, свойству.
Пример класса без декоратора:
Мы видим, что нам необходимо добавить логирование для метода, чтобы отследить его работу. В этом случае к нам на помощь приходят декораторы.
Пример декоратора:
Декоратор принимает функцию, к которой мы применяем этот декоратор и контекст.
И возвращает функцию, в которой мы можем добавить логирование, главное, не забыть вернуть результат выполнения функции target.
Теперь посмотрим, как применить декоратор к нашему классу:
Так же функции-декораторы можно объединять в цепочки.
Удачи в экспериментах!
Всем привет! Сегодня хотел бы рассказать о довольно свежей фиче в TS.
И так, что это за функция декоратор?
Это обыкновенные функции, которые позволяют добавить дополнительное поведение классу, методу, свойству.
Пример класса без декоратора:
class Person { age: number = 0 changeAge() { console.log("Logger: Func start") console.log("changing age...") console.log("Logger: Func end") }}const person = new Person();person.changeAge()Мы видим, что нам необходимо добавить логирование для метода, чтобы отследить его работу. В этом случае к нам на помощь приходят декораторы.
Пример декоратора:
function Logger<This, Args extends number[], Return>( target: (this: This, ...args: Args) => Return, context: ClassMethodDecoratorContext<This, (this: This, ...args: Args) => Return>) { return function(this: This, ...args: Args) { console.log("Logger: Func start") const result = target.call(this, ...args) console.log("Logger: Func end") return result }}Декоратор принимает функцию, к которой мы применяем этот декоратор и контекст.
И возвращает функцию, в которой мы можем добавить логирование, главное, не забыть вернуть результат выполнения функции target.
Теперь посмотрим, как применить декоратор к нашему классу:
class Person { age: number = 0 @Logger changeAge() { console.log("changing age...") }}const person = new Person();person.changeAge()Так же функции-декораторы можно объединять в цепочки.
Удачи в экспериментах!
🧐Сложность алгоритмов. Разбор Big O
В этой статье мы рассмотрим, почему знание сложности алгоритмов является важным навыком для разработчика, какие методы используются для оценки сложности, и какие практические применения можно найти для этого знания при создании веб-приложений.
Читать...
В этой статье мы рассмотрим, почему знание сложности алгоритмов является важным навыком для разработчика, какие методы используются для оценки сложности, и какие практические применения можно найти для этого знания при создании веб-приложений.
Читать...
Хабр
Сложность алгоритмов. Разбор Big O
Сложность алгоритмов - это ключевой аспект при проектировании и создании веб-приложений, особенно при работе с большим объемом данных или выполнении вычислительно сложных операций. Понимание, как...
Отражения изображений с помощью CSS-свойства box-reflect
Позволяет отражать содержимое элемента в одном определенном направлении(above, below, right, left). Второй параметр отвечает за смещение. И что еще интереснее, мы можем добавить градиент в качестве эффекта затухания, используя третий параметр.
Поддержка свойства составляет 94.49%
Позволяет отражать содержимое элемента в одном определенном направлении(above, below, right, left). Второй параметр отвечает за смещение. И что еще интереснее, мы можем добавить градиент в качестве эффекта затухания, используя третий параметр.
Поддержка свойства составляет 94.49%
😵💫Глубокий JS. В память о типах и данных
В этой статье мы заглянем под капот движка V8 и посмотрели, как в нем устроены основные типы данных.
Читать...
В этой статье мы заглянем под капот движка V8 и посмотрели, как в нем устроены основные типы данных.
Читать...
Хабр
Глубокий JS. В память о типах и данных
Уровень: Senior , Senior+ Всех нас учили, что в JavaScript есть примитивные и ссылочные типы данных. Исчерпывающая информация есть в документации MDN , а на просторах интернета полно статей на этот...
Обводка текста с помощью CSS-свойства text-stroke
Свойство определяет ширину и цвет обводки текстовых символов. Это сокращенная форма записи для следующих свойств:
Поддержка свойства составляет 96.59%
Свойство определяет ширину и цвет обводки текстовых символов. Это сокращенная форма записи для следующих свойств:
webkit-text-stroke-width
webkit-text-stroke-color
Поддержка свойства составляет 96.59%
This media is not supported in your browser
VIEW IN TELEGRAM
Drag and Drop(потяни и брось) на JS
HTML:
По умолчанию перемещаться могут только ссылки, изображения и выделенные фрагменты. Чтобы добавить возможность перетаскивания другим элементам, нужно задать атрибуту draggable значение true:
HTML:
<div class="box">JavaScript:
<!-- по умолчанию draggable="true" -->
<img class="image" src="img/gift.jpg">
</div>
<div class="box"></div>
const boxes = document.querySelectorAll(".box"),
image = document.querySelector(".image");
boxes.forEach(box => {
box.addEventListener("dragover", (e) => {
e.preventDefault();
});
box.addEventListener("drop", () => {
box.appendChild(image);
});
});По умолчанию перемещаться могут только ссылки, изображения и выделенные фрагменты. Чтобы добавить возможность перетаскивания другим элементам, нужно задать атрибуту draggable значение true:
<div draggable="true">Draggable element</div>