Как стать автором
Обновить
10
0
Павел @libroten

Программист

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

Неопределённое поведение в C/C++ и приёмы против лома

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

Некоторое время назад в Интернете ходила статья о неопределённом поведении, просто бесившая коренную аудиторию Rust. Завсегдатаи С и C++ в ответ только бурчали, что кто-то просто не понимает Всех Тонкостей и Нюансов Их Светлейшего Языка. Как обычно, пришло время и мне постараться изо всех сил и вставить мои пять копеек в эту застарелую дискуссию.

Готовьтесь поговорить об Основной Проблеме языков C и C++, а также о Принципе Лома.

Читать далее
Всего голосов 28: ↑27 и ↓1+26
Комментарии71

Разрабатываем свой браузер. Часть вторая: CSS

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


Всем привет!


Продолжаем цикл статей по разработке браузерного движка.


Да, лучше поздно, чем никогда. Да, перерыв был большой.


В конце статьи я опишу, как поживает проект lexbor, что с ним происходит.


В этой статье я постараюсь раскрыть особенности парсинга Cascading Style Sheets (CSS). Расскажу, как вывернуть «ежа» наизнанку и как тестировать полученный результат.


В CSS спецификациях всё разжевано, ну, или почти всё, тут я расскажу, как всё устроено, куда смотреть и с чего начать.


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


И конечно, как это обычно бывает, мы замахнёмся на звание самого быстрого парсера CSS.

И так, начнём!
Всего голосов 11: ↑11 и ↓0+11
Комментарии1

Пишем самую тупую на свете сортировку

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

И это не пузырьковая, а нечто гораздо более тупое.

Как-то после обеда, стоя за чашечкой кофе, мне пришла в голову мысль. Что ведь для того чтобы убедиться что массив отсортирован, надо сделать `n-1` сравнение. Например для массива длины 4 таких сравнения будет 3:

Дальше тупее
Всего голосов 87: ↑86 и ↓1+85
Комментарии45

Подводные камни C++. Решаем загадки неопределённого поведения, ч. 2

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

Мы продолжаем цикл статей, посвящённых теме undefined behavior. Ранее мы исследовали предпосылки неопределённого поведения в C++, предоставили формальные определения и рассмотрели несколько примеров. Сегодня углубимся в проблему: сосредоточимся на случаях UB при многопоточности и неправильном использовании move-семантики.

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

Читать далее
Всего голосов 30: ↑29 и ↓1+28
Комментарии9

Первые новинки C++26: итоги летней встречи ISO

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

На недавней встрече комитет C++ активно взялся за C++26. Уже есть первые новинки, которые нас будут ждать в готовящемся стандарте C++:

  • улучшенный static_assert,
  • переменная _,
  • оптимизация и улучшение для std::to_string,
  • Hazard Pointer,
  • Read-Copy-Update (так же известное как RCU),
  • native_handle(),
  • целая вереница классов *function*,
  • множество доработок по constexpr,
  • std::submdspan,
  • и прочие приятные мелочи.

Рассмотрим новинки на примерах
Всего голосов 66: ↑64 и ↓2+62
Комментарии119

Два типа мышления

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

Параметры: +DRY, -KISS, +architecture

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

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

Читать далее
Всего голосов 13: ↑3 и ↓10-7
Комментарии8

Простая нейронная сеть без библиотек и матриц. Обучение с учителем

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

Руководство? Гайд? В общем ремейк описания моего опыта создания простой, а главное понятной любому новичку нейросети :)

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

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

Какой язык программирования выбрать? Часть 4: Spark

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

Особенность Spark в том, что другого такого фреймворка нет в принципе. Flink, Apache NiFi и другие инструменты закрывают не все задачи. Лично моё мнение – Spark на голову выше их всех. Он уникален, широко распространён и де-факто является стандартом индустрии обработки больших данных.

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

Как PDF изменил мир

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

Нам сейчас трудно представить, но было время, когда документы для печати нельзя было создать и подготовить за считанные секунды. И вообще, раньше обмен документами был громоздким процессом, который включал в себя распечатку и физическую передачу из рук в руки. Но всё изменилось в 1993 году, когда Adobe Systems представила миру PDF (Portable Document Format) — революционно новый формат файлов, он упростил обмен документами и их архивирование.

Тридцать лет спустя PDF — популярный формат документов для всего: от налоговых форм до электронных книг и руководств пользователя. PDF изменило то, как пользователи создают, делятся и получают доступ к цифровым документам. Только в прошлом году пользователи открыли более 400 миллиардов PDF-файлов в продуктах Acrobat, а Adobe обработала более 8 миллиардов транзакций с электронными и цифровыми подписями. PDF стал неотъемлемой частью современного мира, оказав фундаментальное влияние на появление онлайн-печати.
Читать дальше →
Всего голосов 48: ↑48 и ↓0+48
Комментарии62

Одноплатники конца лета 2023 года: что предлагает рынок

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

Одноплатные компьютеры — отличный инструмент как для DIY-проектов, так и решения корпоративных задач. Производители продолжают выпускать новые модели, ну а мы — рассказывать о достоинствах и недостатках этих устройств. Под катом — подборка новых моделей, которые могут пригодиться всем и каждому. Поехали!
Читать дальше →
Всего голосов 30: ↑30 и ↓0+30
Комментарии21

Я люблю питон, и вот почему он меня бесит

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

Вас приветствует ваш зануда!

Если вы следите за моей ленивой активностью, то заметили бы, что у меня много от чего пригорает. Вот, например:
- У меня пригорает от низкосортных статей на потоке: Питон против Безумного Макса, или как я посты на Хабре замораживал
- У меня пригорает от Django: Окей, Джанго, у меня к тебе несколько вопросов
- И от Яндекса тоже: Собеседование в Яндекс: театр абсурда :/
- И от рекрутеров: Я единственный из 1400, или самый крутой рекрутинг, что я проходил

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

Это что же получается, kesn опять открыл postman и сломал вёрстку на сайте? Поразительно, никогда такого не было, и вот опять! В принципе, тут можно писать текст любой длины (похоже, у них на бэкенде не Char(255), а Text). Они проверяют длину только на фронтенде, а бэкенд принимает строку любой длины. И это, блин, забавно) Вообще мой девиз - 'кто ищет, тот всегда найдёт', поэтому я ищу постоянно. Кстати, на Хабре скоро выйдет статья про программирование глазами Погромиста, там в том числе про уязвимости на сайтах будет - поэтому если не хотите пропустить, то подписывайтесь на меня в телеге: @blog_pogromista
Всего голосов 248: ↑238 и ↓10+228
Комментарии143

Мифы и реальность языка программирования C

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

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

Нужно сказать, что C – это старый язык, в котором не хватает множества современных возможностей. Но чего в нём хватает, так это инкапсуляции и изоляции.

Читать далее
Всего голосов 27: ↑23 и ↓4+19
Комментарии29

Почему сервер не просто «большой макбук». Часть 1

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

Топология памяти

Очень часто вижу подход к серверам и вычислительной инфраструктуре на кухонном уровне даже от вроде бы профессиональных людей с высочайшими ЗП в полмиллиона и выше.
Сервер - это просто большой макбук, а СХД просто большой диск.

Итак, давайте разбираться. И начнем со страшной темы - топология памяти.

Объяснять буду реально на желудях и шишках, поэтому сразу просьба к крутым суперпрофи - не надо пытаться меня уличить, это не для вас написано.

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

Читать далее
Всего голосов 38: ↑36 и ↓2+34
Комментарии58

Соник, который не смог или проклятье четырех девяток

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

В начале двухтысячных друзья подарили мне Sega Dreamcast, топовую японскую приставку, которая прожила у меня чуть больше месяца, после чего я от неё избавился, сменяв на вторую плойку черного цвета - игр в городе для этого чужеземца в то время было ровно одна - MDK2. И больше местные бизнесмены уездного города N предложить не могли. И только лет через десять, мне выпала возможность попробовать что же это была за консоль, которая полюбилась многим, и оставила теплые воспоминания в сердцах игроков, но прожгла дыру в бюджете создателей. Её жизненный цикл оказался очень коротким, всего 3 с небольшим года, после чего Sega свернула не только производство самой консоли, но и вообще покинула ряды платформодержателей. При том, что сама приставка попала в книгу рекордов по количеству проданных устройств за 24 часа. Сейчас Dreamcast, как и почти все ретро-консоли переживает вторую молодость, энтузиасты умудряются найти почти новые, а иногда и вовсе не распакованные образцы. Что удивительно, до сих пор за счет комьюнити и фанов, существуют сервера для некоторых онлайн-игр. А вот с запчастями все сложнее с каждым годом и даже великий китайский Алибаба не всегда может предложить замену. Не меньшим сюрпризом для меня стало и то, что для приставки все еще выходят игры, и вообще эксклюзивы. Не ждите от статьи какой-то аналитики, просто небольшой экскурс в историю, если вы её еще не слышали. Интересно как так вышло?

It's thinking
Всего голосов 12: ↑12 и ↓0+12
Комментарии9

Лучшие в мире батарейки по цене 13 рублей 75 копеек

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров55K
Ашан снова удивил. В продаже появилась новая версия батареек Auchan High Performance по цене 55 рублей за упаковку из четырёх штук.

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


Читать дальше →
Всего голосов 127: ↑125 и ↓2+123
Комментарии82

Парсинг сайта с помощью Chat GPT: упрощаем создание парсера

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

Тут будет код и непонятные слова (неподготовленным лучше не лезть)

Приветствую всех!

Сегодня мы разберём, как можно использовать Chat GPT для создания парсера сайта.

Будем использовать Python и библиотеку Selenium.

🛑 Отмечу, что данная статья не предназначена для создания универсального инструмента парсинга любого сайта.

Я расскажу, как ускорить процесс создания парсера с помощью Chat GPT.

Углубимся в тему
Всего голосов 9: ↑2 и ↓7-5
Комментарии8

Последствия отмены 38 налоговых соглашений с «недружественными» странами: самый полный анализ

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

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

Читать далее
Всего голосов 56: ↑51 и ↓5+46
Комментарии68

Есть ли жизнь в виртуалке на ПК?

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров11K
image
Виртуализация и работа в виртуальных машинах (ВМ) прочно входят в нашу жизнь. Кто-то таким образом тестирует программное обеспечение (ПО), кто-то реализует рабочие места, а кто-то организует работу сервисов. Неизменно во всем этом деле только то, что программным образом ресурсы ПК/ноутбука делятся на несколько частей, пропорции которых задаете Вы или человек, который его администрирует. Однако можно ли в ВМ запускать любое ПО без ограничений и может ли она быть, как и ПК, МУЛЬТИМЕДИЙНОЙ? Давайте разбираться.
Читать дальше →
Всего голосов 14: ↑13 и ↓1+12
Комментарии34

Как Python использует сборку мусора для эффективного управления памятью

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

В Python мы часто думаем о переменной как о метке для значения. Однако, если говорить точнее, то переменная на самом деле указывает на объект, который хранит значение.

Читать далее
Всего голосов 15: ↑13 и ↓2+11
Комментарии4

Внутреннее представление и оптимизации строк в JavaScript-движке V8: «отмываем» строки, «обгоняем» C++

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

С самого рождения JavaScript в каком-то смысле был языком для манипулирования текстом — от веб-страничек в самом начале до полноценных компиляторов сейчас. Неудивительно, что в современных JS-движках достаточно много сил уделено оптимизации внутреннего представления строк и операций над ними.

В этой статье я хочу рассмотреть, как могут быть представлены строки в движке V8. Попытаюсь продемонстрировать их эффект, обогнав C++ в очень честном бенчмарке. А также покажу, в каких случаях они могут, наоборот, привести к проблемам с производительностью, и что в таких случаях можно сделать.
Читать дальше →
Всего голосов 84: ↑83 и ↓1+82
Комментарии15

Информация

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