Pull to refresh
2
0
Send message

Условные выражения в CSS

Level of difficultyMedium
Reading time10 min
Views30K

Мне нравится думать о CSS как о языке дизайна с условными выражениями. На протяжении многих лет CSS был известен как способ стилизации веб-страниц. Однако сегодня этот язык эволюционировал настолько, что в нём уже есть правила условных выражений. Любопытно то, что эти правила реализуются не напрямую (например, в CSS всё ещё нет if/else).

Инструменты дизайна наподобие Figma, Sketch и Adobe XD сильно облегчили жизнь дизайнеров, однако им всё равно не хватает той гибкости, которая есть у CSS.

В этой статье я расскажу о некоторых возможностях CSS, которые мы используем каждый день, и покажу, насколько они условны. Кроме того, я приведу несколько примеров, в которых CSS гораздо мощнее, чем инструменты дизайна.
Читать дальше →

Разбираемся с рекурсией на примере связных списков

Reading time10 min
Views5.6K
Разбираемся с рекурсией на примере связных списков.
Разбираемся с рекурсией на примере связных списков.
Разбираемся с рекурсией на примере связных списков.
Разбираемся с рек-ОШИБКА: ПЕРЕПОЛНЕНИЕ БУФЕРА

image
Матрёшка в разобранном виде
Читать дальше →

Прокачиваем навыки CSS с помощью селектора :has()

Level of difficultyHard
Reading time9 min
Views8.6K


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


Представляю вашему вниманию перевод этой замечательной статьи, посвященной продвинутому использованию нового CSS-селектора :has().


:has() предоставляет возможность "заглядывать вперед" с помощью CSS и стилизовать родительский элемент (предка). Этот селектор может быть легко расширен для стилизации одного или нескольких дочерних элементов (потомков). Регистрация состояний или позиций элемента позволяет стилизовать почти любую комбинацию элементов как уникальных или входящих в определенный диапазон.


Обратите внимание: на сегодняшний день :has() поддерживается не всеми браузерами, поэтому использовать его в производственных приложениях пока рано.

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

Repka Pi 3 – смотрим и тестируем первый отечественный одноплатный компьютер

Level of difficultyEasy
Reading time9 min
Views57K

Всем привет, сегодня я хотел бы поделиться с Вами моим опытом и первыми впечатлениями от отечественного одноплатного компьютера Repka Pi 3. Мне действительно посчастливилось одним из первых «пощупать» данную плату. В этом небольшом обзоре, я покажу плату, немного протестирую её и поделюсь общими впечатлениями, мыслями касательно производства и импортозамещения.

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

Читать далее

С чем едят микросервисы

Level of difficultyEasy
Reading time5 min
Views4.7K

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

Но для начала поговорим о том, как было плохо раньше.

Читать далее

Сказ о поддержке подсказок типов для функции сложения в Python, или Вот как непросто бывает идти в IT…

Level of difficultyMedium
Reading time8 min
Views5.5K

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


Думаю, многие отнеслись к этому скептически, а потому посмотрим на одну полностью выдуманную ситуацию. Если явно не указано иное, всё в ней вымышлено. Редактируя текст, я понял, что в попытках 4–6 ошибок даже больше, чем предполагалось, но переписывать снова не буду.


Итак, именно вы поддерживаете популярную стороннюю библиотеку slowadd. В ней много вспомогательных функций, декораторов, классов и метаклассов, но вот главная функция:


def slow_add(a, b):
    time.sleep(0.1)
    return a + b
Читать дальше →

Блокировки в bash скриптах

Reading time3 min
Views9.7K

Иногда бывает нужно сделать так, чтобы в каждый момент времени работало не больше одного экземпляра вашего bash скрипта. Если на вашей платформе есть команда flock, то это сделать достаточно просто:


#!/bin/bash

LOCK_FILE=/tmp/my-script.lock
LOCK_FD=9

get_lock() {
    # need to use eval here for proper expansion
    eval "exec $LOCK_FD>$LOCK_FILE"
    flock -n $LOCK_FD
}

get_lock || exit

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

Колоночная база данных в PostgreSQL 15 и факты о территории России по данным OpenStreetMap

Level of difficultyMedium
Reading time5 min
Views8.9K

Продолжим тему из публикации «Как поместить весь мир в обычный ноутбук: PostgreSQL и OpenStreetMap».

Сегодня визуализируем 15 мест где в России больше всего зданий. В этом нам поможет мой проект openstreetmap_h3 и PostgreSQL 15. На данный момент OpenStreetMap H3 единственное решение для импорта OSM данных партиционированных по H3 геоиндексу в PostgreSQL и Citus massive parallel processing. Сохраним данные в колоночное хранилище и посмотрим на план запроса для него.

В этой публикации мы будем агрегировать данные в большой таблице где нас интересуют для этих операций лишь два столбца и сможем извлечь пользу от этой модели данных на NVMe накопителе. Раньше я работал с колоночными базами данных AWS Redshift, Dremio, QuestDB и HeavyDB, но не смотря на их производительность, до функционала/протестированности и стабильности PostgreSQL им еще пока еще ох как далеко. Вот и отлично, попробуем получить все плюсы экосистемы PostgreSQL и колоночного хранилища citus. Вперед, к заветной цели на самых свежих версиях программ нашего аналитического стека!

Читать далее

PostgreSQL: настройка и оптимизация производительности. Часть 2

Reading time12 min
Views8.3K

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

Читать далее

История победы в VK Cup'22/23:Go

Level of difficultyMedium
Reading time21 min
Views4.6K

Всем привет! 5 февраля завершился очередной VK Cup, в котором в этот раз впервые была секция посвящённая Go. О конкурсе я узнал случайно в одном из Телеграм каналов и решил посмотреть, что же там за задачи. Соревнование состояло из из 3 этапов:

Квалификация: нужно было реализовать несколько функций, чтобы прошли тесты. Дальше проходило 256 человек.

Отбор: задача про внешнюю сортировку и построение кучи, которая не вмещается в RAM. Дальше проходило 16 человек.

Финал: построение коллажа из 1000+ картинок размером 512×512 px.

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

В финале были чёткий критерий оценки: кто быстрее построит коллаж, тот и победил. Решение «в лоб» решает эту задачу за ~16 секунд на моём AMD Ryzen 7 5800H (16 HT cores). Если интересно как его ускорить до 0.23 секунды, прошу под кат, там много текста, кода, картинок и даже немного ассемблера.

Читать далее

Код на репите. Механизмы повторного использования кода: от элитного до простого

Level of difficultyMedium
Reading time19 min
Views4.6K

Привет! Меня зовут Грант, я .Net-разработчик. Знаете вы это или нет, но ваш код можно переиспользовать: будь то модуль, компонент или архитектура. Одни разработчики делают это осознанно, другие на уровне рефлексов. Повторное использование хорошего кода экономит время и другие ресурсы, позволяет применять лучшие практики на проектах, чтобы в итоге эффективнее решать бизнес-задачи.

Мне стало интересно разобраться, когда возможен code reuse, какие проблемы стоит предусмотреть, и какие ресурсы заложить при реализации проектов. Для этого я проанализировал более 30 источников, в том числе иностранных, и вспомнил свой личный опыт на проектах. Разберу классификации механизмов повторного использования и расскажу о своей, покажу примеры разных масштабов: от уровня нескольких операторов до уровня архитектуры.

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

Читать далее

Всё про USB-C: высокоскоростные интерфейсы

Level of difficultyMedium
Reading time12 min
Views14K

Одной из прекрасных возможностей USB-C является его высокоскоростной потенциал. Распиновка в этом стандарте предоставляет вам четыре высокоскоростные дифференциальные пары и ещё несколько низкоскоростных, что позволяет передавать огромные объёмы данных через разъём размером с центовую монету. Не все устройства используют эту возможность, но от них этого никто и не требует – USB-C спроектирован так, чтобы подходить для любого портативного девайса. Однако, когда у вас есть устройство USB-C с потребностью в высокой скорости, нельзя не отметить весь потенциал этого стандарта и то, насколько хорошо он может работать.

Возможность получения высокоскоростного интерфейса через USB-C называется Alternate Mode (альтернативный режим), или коротко «altmode». Сегодня можно встретить три варианта altmode – это USB3, DisplayPort и Thunderbolt. При этом некоторые, например HDMI и VirtualLink, канули в лету, а другие, например USB4, только собираются появиться на свет. Для большинства альтернативных режимов требуется цифровая коммуникация через USB-C, предполагающая передачу определённых сообщений по каналу Power Delivery (PD). Тем не менее способны на это не все, и самым простым примером является USB3. Давайте разберём, что же лежит в основе альтернативного режима.
Читать дальше →

DevOps и SRE просто модно

Level of difficultyEasy
Reading time3 min
Views4.9K

Всем привет Хабровчане!

Хочу рассказать про современный мир IT и его подходах. Сегодня каждая компания говорит про DevOps и более чем уверенна, что он у них есть. Читая вакансии на множестве ресурсов, я часто вижу объявления "требуется DevOps инженер" с расписанным стеком тех или иных модных инструментов. Но вот что самое интересное, что больше ничего и не требуется, главное знать как пользоваться теми самими инструментами. То есть "DevOps инженер" - это такой оператор, который знает куда тыкать и где просто нужно описать пайпллайн, не вдаваясь в подробности разработки. Когда эта методология только пришла к нам, порог вхождения был довольно высок, а сегодня пара курсов дают пропуск в этот мир и это грустно.

Читать далее

В чем отличие Linux от Windows и почему я перестал пользоваться продуктами Microsoft

Level of difficultyEasy
Reading time4 min
Views96K

Тема довольно популярна, особенно в последнее время, из-за блокировки Microsoft собственного сайта для скачивания окон в России. Конечно, это не стало серьезным препятствием для продвинутых пользователей. Многие задумались о переходе на другую операционную систему. MacOS такой же коммерческий проект, как и Windows. И после подобного поведения компании, у которой находится большинство пользователей настольных пк в мире, никто не гарантирует, что в компании Apple не захотят поступить также. Linux на этом фоне стал куда более привлекательным, поскольку относится к открытому программному обеспечению.

Читать далее

Есть ли польза от GoF-паттернов?

Level of difficultyEasy
Reading time5 min
Views12K

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

Читать далее

Увлекательная криптография. Часть 1

Level of difficultyMedium
Reading time7 min
Views7.1K

Как и многие специалисты по ИБ, я очень люблю разминать мозг различными головоломками. Идеальным для меня является формат CTF, позволяющий проверить свои знания и толику нестандартного мышления на различных типах задач.

Сегодня я хочу рассказать о первой из трёх задач из категории Crypto с прошлогоднего CTF HTB «Cyber Apocalypse». Задачи на криптографию моя отдельная любовь, поскольку позволяют нетрадиционно взглянуть как на привычные криптографические алгоритмы, так и на неудачные попытки их использования. Особенно интересно искать уязвимость в самописных алгоритмах. Последнее наиболее опасно в реальной жизни, поскольку некоторые разработчики уверены, что уж они то смогут как минимум правильно реализовать известный алгоритм, а не тянуть за собой OpenSSL. Некоторые даже стараются написать свой собственный алгоритм и тем самым обеспечить надежную защиту данных! Множество CTF задач разной сложности обычно позволяют быстро развенчать этот миф :-)

Читать далее

Кластер ElasticSearch на 1Ptb+

Level of difficultyHard
Reading time9 min
Views8.5K

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

На проекте в моем ведении находилось несколько on-premise кластеров в нескольких европейских датацентрах. «Мы» в этой статье — небольшая команда DataOps из 5 человек.

Было дело я читал на Хабре статью про «Кластер Elasticsearch на 200 ТБ+» и примерял написанное к нам, у нас такой кластер считался средним, самый маленький кластер под 0,1Ptb, а большой тогда был под 0,5Ptb. Потом была поставлена задача подготовить кластер к увеличению объемов входящих данных в 2-3 раза, а срок хранения в 2 раза, т. е. объем хранимых данных, если грубо экстраполировать, должен был стать в районе 2-3Ptb.

Хочу поделиться нашим опытом, может кому пригодиться.

Читать далее

Chrome Headless против cloudflare JS challenge

Level of difficultyMedium
Reading time41 min
Views28K

Автоматизация сбора информации с различных ресурсов - обычная задача для людей разных сфер деятельности. Жаль, что не всегда бывает достаточно сделать простой GET запрос и разобрать полученный html. Веб-сайты, с которых собираются данные, принимают защитные меры для предотвращения автоматизированных запросов. Одной из таких мер является использование cloudflare. Сегодня мы посмотрим, как cloudflare выявляет ботов через javascript и коснёмся темы деобфускации скриптов.

Читать далее

Самый простой пример CI/CD

Level of difficultyMedium
Reading time7 min
Views24K

Однажды подслушано:

— А… А что мы сейчас делаем?

— Деплой приложения.

— А что такое деплой?

— Деплой… Ну это деплой, что тут не понятного?

Читать далее

NGINX подготовил бинарники для предварительной версии реализации QUIC+HTTP/3

Level of difficultyMedium
Reading time5 min
Views7.3K

NGINX подготовил бинарники для предварительной версии реализации QUIC+HTTP/3: "Мы рады сообщить, что наша предварительная реализация поддержки NGINX для QUIC+HTTP/3 теперь доступна в виде предварительно собранных бинарных пакетов для двух дистрибутивов: Red Hat Enterprise Linux 9 и Ubuntu 22.04"

Подробности под катом.

Читать далее

Information

Rating
6,179-th
Registered
Activity