Обновить
18
0
Журат Максим@ChessMax

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

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

Ликбез о плавающей точке: сложение, катастрофическое сокращение и бабушка Кэхена

Уровень сложностиПростой
Время на прочтение14 мин
Охват и читатели10K

Давайте продолжим обсуждение самой неоптимизированной в мире 32-битной библиотеки для работы с плавающей запятой TinyFloat. Библиотека написана на C++ и намеренно избегает встроенных типов плавающей запятой, полагаясь исключительно на 32-битные целые числа. Цель состоит в том, чтобы сделать код максимально читабельным — без бит-хаков и хитроумных уловок.

Библиотека пишется в рамках борьбы с неграмотностью населения, поэтому, я хочу иметь подробную документацию о том, что происходит «под капотом». Оказалось, что лучший способ документировать код C++ — это полностью переписать его на Python :-)

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

Читать далее

Как решать LeetCode? Легко! Нужно просто…

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели34K

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

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

Подробнее о паттернах

Как защитить свой VDS сервер: 53 000 попыток взлома за 5 дней

Уровень сложностиСредний
Время на прочтение23 мин
Охват и читатели39K

Как защитить свой VDS сервер: 53 000 попыток взлома за 5 дней

Представьте себе: вы арендовали скромный VDS, чтобы поэкспериментировать. Ничего грандиозного — пара тестовых сайтов, простенький веб-сервер на nginx, пара скриптов в cron для автоматизации рутины, SSH для удалённого доступа. Обычная песочница для разработчика, никому, казалось бы, не интересная. Сервер тихо живёт своей жизнью где-то в облаке, отдаёт странички, выполняет задачи, ждёт ваших команд. Вы даже не подозреваете, что за этой тишиной уже разворачивается настоящая цифровая охота.

За два года работы в технической поддержке облачного хостинга я видел множество взломов, помогал клиентам с восстановлением серверов. Видел всё: от примитивных майнеров до полностью стёртых проектов без бэкапов. Сейчас я работаю инженером технической поддержки в компании CleverData (входит в холдинг LANSOFT).

Однажды, ради чистого любопытства, я решил заглянуть в логи свежеиспечённого VDS, созданного всего пять дней назад...

Читать далее

Пограничные случаи HTTP, которые должен понимать каждый разработчик API

Уровень сложностиСредний
Время на прочтение16 мин
Охват и читатели16K

В феврале прошлого года у интерфейса веб-серверов Rack, лежащего в основе практически каждого приложения Ruby on Rails, был обнаружен CVE-2024-26141. Уязвимость была простой: достаточно отправить запрос файла с сотней байтовых диапазонов, и Rack генерировал неожиданно большой ответ. Серверы продакшена можно было атаковать одиночными HTTP-запросами, пока у них не закончится ресурс памяти или канала.

Усугубляло ситуацию то, что баг затронул широкий диапазон версий: от 1.3.0 и выше; это означало, что уязвимыми оказались приложения, которые писали с 2011 года. Многие разработчики тратили все свои выходные на установку патчей.

Это пример того, как простой неправильно обрабатываемый пограничный случай HTTP может нанести существенный ущерб. И не потому, что мы плохие разработчики, а потому, что HTTP сложен. В идеальном случае всё работает замечательно. Но потом наступает продакшен.

Читать далее

Как растить мышцы двумя тренировками в неделю? Подход для людей с полной занятостью и готовый план на 2 дня

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели98K

Силовые тренировки уже давно не инструмент для соревновательного бодибилдинга и пауэрлифтинга, а неотъемлемый инструмент здоровой и качественной жизни, в котором вы должны быть заинтересованы.

Только вот некоторые культурные и даже профессиональные мифы повышают порог вхождения в тренажерный зал. Взращивают ментальный барьер, к которому нужно морально готовиться, настраиваться и из-за этого постоянно откладывать начало тренировок. Один из таких барьеров — время. Многие думают, что тренировки обязательно должны быть продолжительными, чтобы быть эффективными. Второй барьер — утомление. Не редко можно услышать что-то из разряда “не устал = не потренировался”“не болит = не растет”.

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

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

UPD: отвечая на комментарии про то, что не хватает картинок/видео упражнений, количества рабочих подходов и распределения нагрузки — в статье все есть. В конце материала найдете все, чего не хватает в самой статье, иначе она была бы еще длиннее.

Читать далее

ФиззБазз ΟΕΔ. Практическое введение в формальную верификацию на зависимых типах Idris 2

Время на прочтение48 мин
Охват и читатели7.8K

Что действительно делает программу великой? Скорость работы, поражающая воображение? Лаконичность и изящество кода, восхищающие коллег? Или, быть может, Архитектура, обещающая вечную гибкость? Тысячи лет все эти империи рушились перед лицом коварной Ошибки. Пришло время провозгласить манифест иной истины: высшая ценность программы — её Достоверность, и цель разработки — доказать, что программа безупречно воплощает замысел своего создателя. В данной статье мы рассмотрим инструменты и методы, которые превращают намерение программиста в неопровержимую теорему. Через формальную верификацию тривиального, но коварного ФиззБазза средствами Idris 2 мы покажем, как строить программы, чья правильность не вера, но математический факт. Зависимые типы — наш меч. Добро пожаловать в мир, где код не просто работает — он доказан.

Рассуждать и доказывать

Docker изнутри: исчерпывающее руководство. Механизмы контейнеризации + примеры, эксперименты и реализация

Уровень сложностиСредний
Время на прочтение33 мин
Охват и читатели43K

Docker — не магия, а грамотное применение механизмов Linux. Разбираем инструмент, который пугает своей сложностью не меньше блокчейна. Показываем на пальцах как работают: Namespaces, Cgroups, OverlayFS – основные компоненты любого контейнера, и как стандарт OCI объединяет их в единую экосистему. Об этом и не только в статье.

Читать далее

Категории типов. Часть 2. Функторы

Уровень сложностиСредний
Время на прочтение27 мин
Охват и читатели6.7K

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

Фокус заключается в том, что...

Flutter: Исчерпывающее руководство по высокопроизводительному рендерингу Canvas’а — Часть 1

Время на прочтение25 мин
Охват и читатели6.4K

Когда дело доходит до создания сложных и высокопроизводительных приложений во Flutter, работа с Canvas может стать настоящим вызовом. В этой статье мы погружаемся в тонкости рендеринга динамичных сцен, от оптимизации GPU и пакетирования команд до продвинутых техник работы с пространственными данными. Мы рассмотрим методы, которые позволят вам создавать плавные и визуально насыщенные интерфейсы, даже когда сцены становятся всё сложнее. Обсудим, как правильно выбрать стратегию рендеринга, оптимизировать отрисовку и внедрить систему камеры для масштабируемых приложений.

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

Читать далее

Категории типов. Часть 1. Hom-типы

Уровень сложностиСредний
Время на прочтение21 мин
Охват и читатели4.2K

Данный обзор посвящён применению теории категорий в программировании. Акцент сделан на то, что стремление к повышению качества программ неизбежно приводит к абстракциям («функтор», «монада» и прочие), которые уже появились в математике при решении другого рода задач.

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

Читать далее

Мой первый VPS: Чек-лист по превращению «голой» машины в маленькую крепость (Часть 1)

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

Привет, Хабр! У каждого из нас бывает этот момент. Ты нажимаешь кнопку «Заказать», и вот он — твой первый, сияющий, свежеустановленный VPS. Ощущение, как будто получил ключи от собственной цифровой квартиры. Можно ставить что угодно, экспериментировать, запускать свои пет‑проекты... Но есть один нюанс.

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

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

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

Читать далее

Выбираем правильные беговые кроссовки, чтобы сберечь колени и не бросить после первой пробежки

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

Однажды моя мудрая бабушка сказала: «Сергей, в этой жизни можно экономить на чем угодно: на одежде, на технике, на ремонте. Если денег нет — то экономь хоть на всем сразу. Но есть кое-что, на чем экономить нельзя ни в коем случае, — и это обувь». Было это сказано лет 15 назад, но ее наставление до сих пор звенит в моей голове, когда я захожу в магазин за ботинками. Хорошая обувь — залог крепкой спины, здоровых ног и отменного настроения. 

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

Читать далее

SRP ч2, Уравнение рендеринга. Функции освещения

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели1.4K

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

Читать далее

Установка Windows через CMD

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели17K

Приходилось ли вам устанавливать современные версии Windows? Если да, то вам точно знаком установщик, каждый этап которого прогружается несколько секунд, и который яростно навязывает вам использование аккаунта Microsoft, с каждым обновлением делая использование локального аккаунта всё труднее и труднее.

Но существует альтернативный способ установить Windows — более быстрый, не требующий подключения к интернету и не навязывающий никаких сервисов — ручная установка с использованием CMD.

Читать далее

Учимся читать SQL SELECT

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

Я отчётливо помню, как сидел на втором курсе на лабах по БД и долго и мучительно методом научного тыка подбирал порядок слов в SELECT-запросе с GROUP BY, чтобы он вернул нужный мне преподу результат. Потому что я не понимал, как работает SELECT, хотя был прилежным (на программистских курсах) студентом, ходил на все лекции и делал лабы за себя и пару "тех парней".

Двадцать лет спустя, когда я встал по ту сторону баррикад и начал сам вести лабы по БД, я столкнулся с той же самой проблемой уже у своих студентов. И, так как за двадцать лет я всё-таки понял, как работает SELECT, то придумал для них способ объяснения, который работает хорошо (в моей практике).

Читать далее

Очередной эмулятор Nes. Продолжаем

Уровень сложностиСредний
Время на прочтение42 мин
Охват и читатели2.7K
image

Всем привет! С вами на связи снова Сергей, и я продолжаю творить «чудо».

В прошлой статье я немного задел тему эмуляции процессора. Советую почитать, кто не читал (ну, опять же, на ваше усмотрение — если решили сделать эмулятор сами, то лучше прочитать). Кстати, я обновил ту статью и немного пробежался по прерываниям. В этой статье, видимо, будет ещё больше технической информации — по правильной реализации памяти и работе с ней. И, наконец, доберёмся до видеоадаптера (PPU).
Читать дальше →

Flutter-Анимации 2025: Полный Гайд

Уровень сложностиСложный
Время на прочтение50 мин
Охват и читатели3.5K

Привет, Хабр! Анимации – это та самая вишенка на торте, которая превращает просто работающее приложение в нечто, чем приятно пользоваться, что хочется «потрогать». Но как сделать так, чтобы эта вишенка не превратилась в тыкву, тормозящую весь UI и съедающую батарейку?

За годы практики я перепробовал, кажется, всё: от простейших AnimatedContainer до замороченных кастомных решений с физикой и глубокой интеграцией с Rive. И сегодня я хочу поделиться с вами этим опытом, собрав в одном месте всё, что нужно знать о создании анимаций во Flutter в 2025 году. Это будет настоящий лонгрид-энциклопедия, так что заварите кофейку или что покрепче!

Мы пройдемся по основам, заглянем под капот продвинутых техник, разберем популярные пакеты и, конечно же, поговорим о том, как не убить производительность и добиться заветных 60+ FPS. Вся информация и ссылки тщательно проверены и актуальны (насколько это возможно предсказать) на июнь 2025 года. Поехали!

Это похоже на новую религию, я заинтере...

«Кем Вы видите себя через 5 лет», или HRско-русский разговорник

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели51K

Вас спрашивали «Кем Вы видите себя через 5 лет»? Меня тоже. За двадцать пять лет в IT я понял, зачем они так делают. Понял – это значит, что я «привык и научился пользоваться» (С). Но «неприятно удивлять» они меня не перестали.

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

Дисклеймер:

Я не призываю врать или «играть по правилам» HR. Я делюсь практической схемой подачи опыта и скиллов, чтобы минимизировать отказы «по софтам». В моем случае она работает.

Читать далее

Ещё 10 ошибок авторов Хабра

Время на прочтение11 мин
Охват и читатели7.1K

Так уж сложилось, что моя основная работа — пролистывать, просматривать и очень внимательно прочитывать статьи на Хабре: уже опубликованные, конкурсные для Технотекста (эти не по первому разу), статьи из Песочницы. Это довольно большой массив данных, который непрерывно обучает мою личную человеческую нейросетку и в том числе «натаскивает» её на распознавание хороших и плохих авторских паттернов. В результате накапливаются знания, которыми очень хочется поделиться с существующими, начинающими и будущими авторами.

Читать далее

Всё про Generic Math в C#

Уровень сложностиСложный
Время на прочтение21 мин
Охват и читатели7.6K


С момента своего релиза в C# 11 и .NET 7 Обобщённая Математика так и осталась тёмной лошадкой в глазах программистов. Разработчики не понимают и не используют эту фичу, статья же ответит на все вопросы и разложит всё по полочкам.

Рассмотрим с нуля концепцию Generic Math. Как она выглядит в C# и других языках программирования, почему вообще появилась. Также зароемся в «кишки» System.Numerics и узнаем, как применить в продакшне кровавого ынтэрпрайза.
Читать дальше →
1
23 ...

Информация

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

Специализация

Разработчик мобильных приложений
Старший
Flutter
Flutter Bloc
MobX
Mobile
Разработка мобильных приложений