Объявления функций vs объявление переменной или зачем нужен extern#новичкам В С/С++ существует интересная механика - разделение на объявление сущности и ее определение. У этого есть серьезные причины:👉🏿 Ускорение компиляции: изменения в реализации не требуют перекомпиляции всех файлов, использующих объявление.👉🏿 Сокрытие реализации: инкапсуляция, предоставление только интерфейса (в .hpp) и скрытие деталей в .cpp.👉🏿 Разрешение циклических зависимостей и возможность ссылаться на типы до их полного определения.👉🏿 Организация кода и разделение ответственности.И если с функциями более менее понятно. Есть объявление в виде обозначения сигнатуры функции. И определение в виде полного предоставления тела функции:void foo(int a); // declarationvoid foo(int a) { std::cout << a << std::endl; // definition}С переменными все немного сложнее. Но начнем с легкого:int i = 0;Это определение хоть глобальной, хоть локальной переменной i и ее инициализация нулем. Все все понимают.Если думать в аналогии с функциями, то легко дойти до мысли что:int i;это объявление переменной. Но это не так!Это в любом случае определение!Если вы встретите такую строчку вне функции, то это определение переменной и ее инициализация нулем. А внутри функции - определение без инициализации(значение будет мусорное). Определение переменной всегда связано с созданием объекта и выделением памяти под него.Тогда как сказать компилятору, что я буду использовать переменную с каким-то именем и типом, но не хочу создавать объект а буду сслаться на определение в другом месте?Ровно для этого и нужно ключевое слово extern.extern int i; // declarationint main() { std::cout << i << std::endl;}int i = 42;// OUTPUT// 42До мейна мы сказали, что будем ссылаться на переменную i, определение которой лежит в другом месте. И сразу после мейна предоставляем это определение. Компилятор все понял и в итоге мы получаем 42 на консоли, а не ноль.В этом случае строчка extern int i; является объявлением глобальной переменной i.Определение переменной может находиться хоть в другой единице трансляции. Просто тогда зависимости будут разрешаться на этапе линковки.Для локальных переменных функций объявление не предусмотрено(оно и не нужно). Если попытаетесь сделать так:int main() { extern int i; std::cout << i << std::endl;}То вы опять объявите глобальную переменную i.То есть чисто объявить вы можете только глобальную переменную (про полям класса речь не идет) и только с помощью extern. Declare your intentions. Stay cool.#cppcore
Программирование — страница 6
Лента темы
В чем-то понимаю конечно любителей вайбкодинга и ассистентов которые пишут код за тебя, в языке и фреймворке с непривычными подходами периодически сидишь и стеклянными глазами смотришь на код который ты полностью понимаешь, но написать рядом такой же без примера не можешьС другой стороны конечно интересно посмотреть на этих ребят +5 лет от текущего момента, насколько это атрофирует именно способность написания кода ручками, и откладывается ли хоть что-то из увиденного в голове
Задача: 1360. Number of Days Between Two DatesСложность: easyНапишите программу для подсчета количества дней между двумя датами.Даты даны в виде строк в формате YYYY-MM-DD, как показано в примерах.Пример:Input: date1 = "2019-06-29", date2 = "2019-06-30"Output: 1👨💻 Алгоритм:1⃣Преобразование строк в даты:Используйте встроенные функции для преобразования строковых представлений дат в объекты дат.2⃣Вычисление разницы в днях:Вычислите разницу между двумя объектами дат в днях.3⃣Возвращение результата:Верните абсолютное значение разницы в днях для получения положительного числа.😎 Решение:using System;public class Solution { public int DaysBetweenDates(string date1, string date2) { DateTime d1 = DateTime.Parse(date1); DateTime d2 = DateTime.Parse(date2); return Math.Abs((d2 - d1).Days); }}Ставь 👍 и забирай 📚 Базу знаний
Пройдусь тоже по MemPalace, раз уже все прошлись.Кейс знаковый и меняет правила игры open source. Я сейчас не про open source "мы сделали коммерческий продукт, с маркетингом, суппортом и клиентами, но решили его открыть чтобы было побольше рекламы и поменьше вопросов у compliance" или "мы делаем закрытые продукты, но вот решили заопенсорцить часть библиотек для комьюнити". Я про open source ради open source, который пойдет в коммерцию, только если будут тащить силой, а может еще и будет упираться (привет, python-requests). Назовем его опенсорц ради опенсорц (O4O).O4O сейчас и так в некотором ступоре, после того как оказалось что воскресное хобби, которому люди предавались годами, можно сжать в 2-3 викенда с агентами. А тут еще выходит Йовович с 40к звездами на гитхабе, что забивает последний гвоздь. Можно конечно и дальше утверждать, что код, написанный машиной "не такой теплый и ламповый", но если копнуть какой-нибудь O4O, который пилят годами, ламповости там часто даже меньше, зато сколько хочешь страшных архитектурных решений, которые этими годами наслаивались на фундамент. И куча потенциальных дыр потому что "это же опенсорц, мы ни за что не отвечаем".Хорошо это или плохо? Конечно хорошо - это конкуренция. Копателям помиральной ямы IT "негде будет брать джунов и мидлов": я собеседовал в жизни уже наверное сотни инженеров (меня даже иногда просят пособеседовать в дружественных компаниях), и у большинства гитхаб либо ужасен, либо отсутствует. А если вдруг не ужасен - это не O4O, а человек случайно захостил у себя то что корпорация решила открыть. Либо он сам ее (со)владелец.На этой прекрасной ноте всем желаю успешных и прибыльных проектов. Или успешной конкуренции по звездам с Миллой Йовович.
Топ неожиданных открытий. Intel GPU драйвер Xe начинает зависать и "тормозить систему" порой просто колом на секунд 30, только мышка елозит, если система начинает работу с swap причём не важно это zram или файловый. Перешёл на i915 обратно и даже 0 намёков на фризы.И необычный сайд-эффект. Я пока пытался поймать и понять, что не работает - затюнил zram и использование swap, как мог 😆, что теперь без xe драйвера, с всякими S76-sched + Zorkiy система просто работает даже под лютой нагрузкой оО.
Выложил лекцию по многопоточным очередям на английском языке.https://www.youtube.com/watch?v=86aNZgS9SOUВ этой лекции мы завершаем обсуждение lock-based примитивов синхронизации в C++ и подводим итог всему, что связано с классическим многопоточным программированием на мьютексах и condition variables. Мы рассмотрим producer–consumer паттерн, реализуем ограниченные MPMC-структуры (стек и очередь), разберём типичные проблемы таких решений и попробуем их исправить. Отдельно обсудим, почему даже "правильные" на первый взгляд интерфейсы могут приводить к потере задач. Далее перейдём к более выразительным механизмам коммуникации между потоками: future/promise, обработке исключений, packaged_task и std::jthread. Посмотрим, как современные абстракции позволяют писать более чистый и безопасный код. В завершение попробуем объединить всё вместе и построить очередь с произвольными задачами.Timeline00:00 Введение. Ментальная модель мьютекса.06:33 Thread-Safe Lock-Based Bounded MPMC Stack.11:01 Измеряем производительность и обнаруживаем проблему.18:00 Пробуем пофиксить проблему: Wake and Done.22:30 Thread-Safe Lock-Based Bounded MPMC Queue.29:00 Критика интерфейса: очередь, которая не может не терять задачи.33:46 Что если мы позволим неограниченный размер?36:52 Возврат данных из потока и механизм future/promise.42:45 Обработка исключений в потоках.46:43 Packaged Tasks and Joinable Threads.51:28 Проблема постановки барьера.57:46 MPMC Queue с произвольными задачами.01:03:26 Задача на подумать и список литературы.#cpp_postgraduate
🧩 C++ обертка для PCRE2pcre2cpp - это объектно-ориентированная обертка для библиотеки PCRE2, обеспечивающая удобный интерфейс для работы с регулярными выражениями. Поддерживает C++17 и C++20, упрощая процесс сопоставления и захвата результатов.🚀 Основные моменты:- Объектно-ориентированный интерфейс для PCRE2 10.47- Совместимость с C++17 и C++20- Удобное сопоставление регулярных выражений- Встроенное захватывание результатов📌 GitHub: https://github.com/MAIPA01/pcre2cpp#cpp
⚙️ Компилятор Go строит типы и ловит циклические зависимостиGo 1.26 принёс незаметное, но важное изменение в type checker. Команда Go опубликовала подробный разбор того, как именно компилятор конструирует типы и обнаруживает циклические зависимости.Как устроена конструкция типовКогда компилятор встречает объявление типа, он строит внутреннее дерево структур. Для простого случая:type T []Utype U *intВсё линейно: сначала строится T, внутри неё []U, внутри неё U, внутри неё *int. Каждый тип становится «завершённым» когда все его поля заполнены и все зависимые типы тоже завершены. Процесс идёт вглубь и разматывается обратно.Рекурсивные типыС рекурсией интереснее:type T []Utype U *TЗдесь T встречается пока ещё строится. Компилятор просто ставит указатель на незавершённый T и движется дальше, рассчитывая что T завершится позже. Когда конструкция доходит до конца, весь "цикл" типов завершается одновременно.Проблема возникает когда незавершённый тип нужно не просто упомянуть, а заглянуть внутрь:type T [unsafe.Sizeof(T{})]intЧтобы вычислить размер массива, нужно знать размер T. Но чтобы знать размер T, нужно завершить построение массива. Круговая зависимость, которую невозможно разрешить, это ошибка цикла.В Go 1.26 переписали подход: вместо сложной bespoke-логики для каждого случая, компилятор теперь отслеживает неполные значения систематически. В каждом месте где может возникнуть значение неполного типа, вставлена проверка:if !isComplete(T) { reportCycleErr(T) return invalid}Это закрыло несколько краевых случаев, которые раньше приводили к панике компилятора вместо нормальной ошибки.➡️ Блог разработчиков📍 Навигация: Вакансии • Задачи • Собесы🐸 Библиотека Go-разработчика#GoDeep
❗️1 сентября 2026 года — дата, после которой логистика уже не будет прежней. Согласно ФЗ №140 от 07.06.2025, электронные перевозочные документы (ЭПД) становятся обязательными для всех. И это важно: речь не только о логистических компаниях. Даже если вы просто заказываете перевозку, например, мебель в офис — вы уже участник этой системы.Многие недооценивают ключевой момент: никаких отсрочек не будет. После дедлайна либо вы работаете через ЭПД, либо фактически выпадаете из правового поля. Исключений почти нет — бумага останется только для спецгрузов (воинские, ЧС) и личных перевозок физлиц. Поэтому лучше не откладывать и уже сейчас проверить свою готовность: входят ли ваши подрядчики в реестр, поддерживает ли ваша 1С работу с ЭПД, выстроены ли процессы. Самый правильный сценарий — протестировать всё заранее на реальных перевозках, а не разбираться в последний момент.При этом важно понимать: ЭПД — это не «PDF вместо бумаги». Это полностью цифровой процесс. Как это работает на практике?📲 Как это работает на практикеЛогист создает ЭТрН прямо в своей 1С:TMS. Документ мгновенно улетает оператору и в ГИС ЭПД — государственную систему, объединяющую всех участников.Водитель не ждёт, пока кладовщик поставит подпись на бумажке. Он просто открывает мобильное приложение на смартфоне (например, «1С:ЭПД») и подтверждает, что груз принят.Если останавливает инспектор ГИБДД, водителю не нужно рыться в бардачке в поисках замызганной накладной. Он показывает QR-код на экране телефона. Инспектор сканирует его и видит все данные в базе.*️⃣Если нужно изменить адрес разгрузки или дату, это делается буквально парой кликов в системе. Водитель сразу видит изменения в приложении — никаких «перечёркиваний» и заверений на бумаге.В итоге:Документы не теряются — всё хранится в единой системе.Процессы становятся прозрачными — каждый этап виден всем участникам.Расчёты ускоряются — оплата транспортных услуг приходит быстрее.По сути, это не просто удобство, а полная перестройка всей логистической цепочки. И чем раньше начать подготовку, тем спокойнее пройдёт этот переход.#ЭПД #ЭлектронныеПеревозочныеДокументы #Логистика #1СЭПД #ГИСЭПД #Новости #ЕТЕПосле 1 сентября 2026 года либо вы в системе, либо вас как бы нет. Бумага умрёт. Готовьтесь.📱 Мы в MAX
Ультратонкие часы сами по себе воспринимаются как инженерный шедевр. Но стоит взглянуть на мануфактурный калибр модели «Загадка Тонкого Короля» отдельно, и масштаб проделанной работы становится еще очевиднее. Калибр K.23-3.1 интегрирован прямо в корпус: задняя крышка часов одновременно служит платиной. Колесная система и узел «баланс-спираль» разнесены по двум уровням, чтобы удержать рекордную толщину в 1,65 мм. В механизме 54 камня – внушительное количество, которое обычно ассоциируется с часами со множеством функций. При этом особого внимания заслуживает финишная отделка, выполненная по всем канонам высокого часового искусства. Прецизионный сплав с повышенной жесткостью делает эту работу еще сложнее: любая лишняя частица снятого металла может повлиять на геометрию детали, а значит – и на работу всего узла.MAX | ВК
Vibe-coding: Как я за 30 минут написал редакторДавно я не писал ничего про нейросети, просто буднично их использую во всех проектах. Но пора повысить планку. Вы уже слышали про вайб-кодинг (vibe-coding)? Я тоже слышал, но пока ничего не кодил. Если коротко: это разработка софта через обычный диалог с ИИ, когда вы описываете «вайб» (суть того, что вам нужно), а нейросеть сама пишет код. Да, сложный высоконагруженный сервис уровня ERP-системы без программистов вряд ли соберешь. Но создать рабочие микро-продукты для собственных задач - абсолютно реально.И вот на днях появился повод это пощупать. Мне понадобилось доработать концепт логотипа, который состоит из полигонов и выглядит как граф. Захотелось вручную подвигать узлы, но чтобы при этом картинка автоматически становилась симметричной. Поэтому Корел отбросил. Решил собрать свой собственный редактор через вайб-кодинг.Начал с простого вопроса - на чем написать и понеслась:▪️ 7 итераций последовательного апдейта функционала ▪️ около 30 минут чистого времениНа выходе - кастомный редактор с нужным мне функционалом. Код написан на JavaScript, интерфейс открывается в обычном браузере. Опыт получился интересный. Сразу стал думать какие еще микро-сервисы можно создать для b2b продаж и ABM. Кстати, о внедрении инноваций в реальный бизнес.Если вы владелец B2B-компании и понимаете, что вам пора внедрять ИИ в маркетинг и отдел продаж – не изобретайте велосипед! У меня уже есть обкатанная в тяжелом b2b методология (как именно ИИ должен помогать B2B-продавцам, а не мешать им) и несколько разных ИТ-решений на базе ИИ. А также подрядчики, которые помогут это все интегрировать в ваши CRM.Если интересно – напишите мне кратко о своем бизнесе и задачах, а я поделюсь возможными решениями.
Собрал Handy + Paste в одно приложениеhttps://github.com/vakovalskii/copyosityРекомендую к изучению как я решал кучу проблем десктопных аппок (невидимых, но использующих команды). После установки нужно на макбуке набрать Cmd+Shift+V, и вы увидите исторический буфер обмена в удобном виде как это вижу я =)Уже месяц потихоньку пилю и стабилизирую для себя буфер обмена для макбука. Чтобы работало как надо, чтобы скрины хранило ровно и текст копировался удобно. Даже подписал его своим кодом разработчика apple (не будет просить карантин).Как по мне (для себя же делал) удобно, полезно, и нет аналоговПосле настроек голосовой модели по урлу, можно получить Option+Space запус голосвого ввода в том месте где стоит курсорА так, конечно, можно скачать массу таких приложений готовых, но мы-то помним, зачем тут собрались? =)Download (DMG)
Радиоконструктор «УНЧ-5» (Зодиак).В 1984 году была выпущена небольшая партия этого радиоконструктора. К сожалению, информация об изготовителе не сохранилась. С помощью этого конструктора можно было собрать монофонический усилитель низкой частоты с выходной мощностью 5 Вт.
📦DECALmachine — аддон для hard-surface детализации в BlenderКакой четверг без обзора плагинов? Сегодня разбираем инструмент, призванный упростить процесс нанесения на объект сложной геометрии без скачков поликаунта.Подробнее об аддоне — в наших карточках! 🔎🔥Схоронил🐳Не моё
Признаки того, что кодовая база вас тормозит👉Когда вы слышите что-то вроде "на фичу надо 3 дня, но с учетом нашей архитектуры – минимум неделя".👉Когда команда боится деплоить проект по пятницам, или даже по четвергам.👉Когда в проекте есть какой-то файл или модуль, который нельзя трогать под страхом смерти.👉Когда на дэшбордах вы видите большой процент покрытия кода тестами, но на деле в критичных местах все равно все постоянно ломается.👉Когда время от выхода на работу до первого коммита у нового инженера занимает больше пары дней.
Потестил Claude Managed Agents - пока ощущение, что маркетинг. Все перечисленные там выгоды все, кто реально что-то делает решили уже много раз и лучше. Но надо тестить дальше, могу ошибаться.Я внимательно посмотрел, что именно Anthropic предлагает в Managed Agents, и сравнил это не с абстрактным “рынком агентов”, а с тем, как я уже работаю на практике у себя.Сравнение было простое.С одной стороны — их подход: agent, environment, session, events, managed infrastructure, server-side history, отдельный удалённый runtime в облаке.С другой стороны — мой реальный рабочий процесс: локальный проект, локальная среда, своя агентная обвязка, память, rules, skills, hooks, многошаговая работа, делегирование субагентам, прерывание задач, итеративная доводка с моим участием.То есть я сравнивал не рекламные формулировки, а конкретный практический результат: что именно это дает разработчику или предпринимателю, который уже давно решает задачи автономности, длинных циклов, tool calling, памяти и управляемой итерации.Практический вывод пока такой.Для моего кейса Managed Agents не выглядят как новый класс возможностей. Это больше похоже на облачную переупаковку того, что в той или иной форме уже давно можно собрать и использовать локально или на своей инфраструктуре.Именно в этом для меня ключевой момент.Если у тебя уже есть рабочая система, которая умеет:долго выполнять многошаговые задачи,использовать инструменты,сохранять состояние,делегировать работу,останавливаться,продолжать работу после обратной связи,работать в понятной тебе среде,то главный вопрос не в том, “умеют ли они автономность”, а в том, что именно они добавляют сверх этого.Пока мой ответ: не так уж много.Более того, в моем сценарии это вообще выглядит как усложнение точки входа. Сейчас мой workflow понятен: есть проект, есть код, есть задача, есть итеративная шлифовка. А у них нужно отдельно создавать agent, environment, session, управлять этим через events и встраивать в свой процесс удаленный runtime. То есть это не “стало проще”, а “перестрой свой workflow под наш способ исполнения”.А теперь самое важное.В реальной разработке проблема обычно не в том, чтобы агент что-то автономно делал 10 минут или 2 часа. Это уже давно не главная проблема. Главная проблема в том, что любая первая постановка задачи неполна. Первичный прогон часто дает только 10% результата. Остальные 80–90% — это доводка: тесты, уязвимости, UX, интерфейс, поведение системы, правки по обратной связи, уточнение того, что вообще нужно было сделать.И вот здесь без человека ничего не происходит. Поэтому лично для меня главный вопрос не “насколько агент автономен”, а “насколько удобно с ним жить внутри реального цикла итераций”. И вот тут мой текущий локальный подход мне пока понятнее, прозрачнее и практичнее, чем их новая облачная схема.Возможно, я ошибаюсь. Возможно, ошибается и сам Anthropic в том, как подает ценность этого продукта. Но на текущий момент мой вывод простой: для продвинутых практиков это пока больше похоже не на прорыв, а на маркетинговую упаковку уже известных возможностей.Для тех, у кого ничего не собрано, возможно, это и полезный shortcut. Для меня — пока нет. Вот такой на сегодня честный вывод. Уверенность у меня высокая, но не абсолютная. Пока что я не вижу здесь ничего, что реально заставило бы меня менять работающий процесс на их новую схему.
✏️ Информатика ЕГЭ - Alex Danov: Сегодня прошел досрочный ЕГЭ по Информатике. Предложу решение № 16 На картинке моё решение прямо в IDLe Shell в три строки.Почему это работает? Потому как в правильных заданиях ФИПИ числитель точно делится на знаменатель, т.е. знаменатель сокращается (или вычитается в другом типе задания). Поэтому мы можем заменить значение функции знаменателя единицей. А для надежности, чтобы убедиться, что числитель делится нацело, мы используем модуль fractions, чтобы считать всё точно в рациональных числах, не переходя в double/float, где остается только ~15 значащих цифр и можно поймать баг из-за округлений. Записал ребусом, чтобы не шаблонили ) Как обычно, ВСЁ ПРОСТО! ;)
На исследование меня сподвигла эта статья от Mark Seemann: https://blog.ploeh.dk/2026/03/30/programming-languages-for-ai/ Но я не думаю, что Idris2 взлетит - нет у него серьезной поддержки. К тому же он конкурирует с Lean 4 в своей нише, который спонсируется…
💻 Что происходит, когда мы включаем компьютер?1. Подача питания Когда вы нажимаете кнопку питания, электричество начинает поступать ко всем компонентам компьютера.2. POST (Power-On Self Test) Прошивка BIOS или UEFI запускает самотестирование, чтобы проверить основные компоненты — процессор, оперативную память, клавиатуру, накопители и т.д. Если что-то не так (например, нет ОЗУ), система подаёт звуковые сигналы или выводит сообщение об ошибке.3. Инициализация BIOS/UEFI BIOS/UEFI настраивает оборудование и ищет загрузочное устройство — жёсткий диск, SSD, флешку и т.д.4. Запуск загрузчика Когда загрузочное устройство найдено, BIOS/UEFI передаёт управление загрузчику (например, GRUB в Linux или Windows Boot Manager в Windows). Задача загрузчика — найти и запустить операционную систему.5. Загрузка ядра ОС Загрузчик находит и загружает в оперативную память ядро операционной системы, затем передаёт ему управление.6. Инициализация ядра Ядро настраивает систему: загружает драйверы, настраивает управление памятью, запускает процессы и т.д. Затем запускается первый пользовательский процесс (init, systemd и др.).7. Запуск пользовательского интерфейса После запуска всех сервисов система показывает графический интерфейс (GUI) или командную строку (CLI).📲 Мы в MAX👉 @i_odmin
Короч я заебался и сделал скрипт для tampermonkey, который сортирует вкладки в поиске гугла в определенном порядке и удаляет ненужные. Было/стало. https://github.com/vvzvlad/google-search-tabs-order.user.js/raw/refs/heads/main/google-search-tabs-order.user.js
Разбор CTF-челленджа от CryptoCat: эксплуатация небезопасной десериализации через Oj.load() в Ruby-приложении#Ruby #RCE #CTF #RubitMQИсследователь представил writeup решения CTF-челленджа YesWeHack Dojo #48: RubitMQ от CryptoCat. В рамках работы он отправил специально сформированный JSON, который при десериализации инжектит встроенный gadget класса Node, позволяющий через аргумент find . -exec добиться RCE и прочитать флаг.Что примечательно, здесь нет прямого eval/system, поэтому эксплуатация строится через классический Unix-gadget find.♾️Технические нюансы♾️Уязвимость связана с использованием Oj.load(payload) без опции :mode => :strict или ограничения допустимых классов. Библиотека Oj по умолчанию допускает десериализацию произвольных Ruby-объектов. Автор использует built-in gadget класса Node (из стандартной библиотеки или зависимостей), который приводит к контролируемому вызову find с флагом -exec. Это позволяет внедрить shell-команду в аргумент -exec, которая выполняется при обработке job.♾️Эксплуатация♾️▪️ Сформировать malicious JSON с сериализованным объектом класса Node с контролируемым аргументом▪️ В аргументе указать find . -exec <command> \; или эквивалент для получения RCE▪️ Отправить пейлоад в эндпоинт обработки job через RabbitMQ-подобный интерфейс или API▪️ При вызове Oj.load() происходит десериализация → инъекция gadget → выполнение find -exec → запуск произвольной команды♾️Импакт♾️RCE на сервере приложения. Атакующий может читать файлы (включая флаг), выполнять произвольные команды, потенциально эскалировать привилегии и полностью скомпрометировать хост.🔗Источник🌚 @poxek | 📲 MAX |🌚 Блог | 📺 YT | 📺 RT | 📺 VK
Собрали всё, что нужно знать о Python — от первой строчки до middle-уровняPython — язык №1 в мире по TIOBE 2026. Его выбирают за то, что рабочий код можно написать уже через несколько часов знакомства. Но потом часто теряешься: что учить дальше и в каком порядке?В путеводителе по Python разобраны все ключевые темы по порядку: типы данных и duck typing, функции с замыканиями и декораторами, ООП с магическими методами, asyncio и GIL, веб-фреймворки Django / Flask / FastAPI, Data Science и тестирование с pytest. Плюс свежее: Python 3.14 получил экспериментальный JIT-компилятор — язык ускоряется, не теряя простоты.#python
🟡 Разработчик KWin исправляет давнюю проблему Wayland, приводящую к сбоям приложенийВ следующую версию базового протокола Wayland войдёт исправление от Влада Загороднего, которое позволит избежать состояния гонки при удалении глобальных объектов. Из-за него приложения иногда получали ошибку протокола и аварийно завершались при отключении монитора.Реализации скорректированного протокола подготовлены для диспетчера окон KWin, фреймворков Qt и GTK, библиотек SDL, Mesa и wayland-rs, слоя совместимости XWayland, а также Chromium и Firefox.Подробнее: blog.vladzahorodnii.com/2026/03/24/addressing-global-removal-race-in-wayland
Подходы к исправлению невалидной геометрии в PostGIS выше 3.2Как программы исправляют самопересечения полигонов? На Мапаконе преподаватель Картетики Алексей Вдовин приоткрыл завесу тайны алгоритмов и рассказал про исправление невалидной геометрии в PostGIS.Самое важное из доклада:• Начиная с PostGIS версии 3.2, можно задавать методы для функции ST_MakeValid(), которая исправляет геометрию. Это связано с релизом библиотеки GEOS 3.10, на которой основаны операции в PostGIS и QGIS.• Раньше ST_MakeValid не имела параметров, но после версии 3.2 можно самостоятельно выбрать метод исправления геометрии. Если выберем метод «structure», получим исправленные геометрии, которые сохраняют внешнюю структуру полигонов и часто выглядят логичнее для пользователя. Примеры разницы — на скриншотах• По умолчанию стоит метод «linework», но можно вручную задать метод «structure» и радоваться результатам• Для тех, кто пользуется QGIS: эти же принципы реализованы в инструменте исправления геометрий в QGIS, где аналогично можно выбрать метод восстановления «Структура»В видеозаписи доклада Алексей ещё и показывает, как этим пользоваться на практике. А в самом начале просто говорит про невалидные геометрии в PostGIS, а также про практическую разницу ST_IsValid() и ST_IsValidDetail()🌐 Освойте PostGIS и начните работать с базами данных в ГИС на курсе «PostgreSQL и QGIS», который начинается во вторник, 7 апреля. На курсе пройдём путь от основ SQL-запросов к автоматизации ГИС-процессов 🔥
🤔 Есть ли диалекты в SQL?Да, в SQL есть диалекты. Это стандартный язык для управления реляционными базами данных, но каждая система управления базами данных (СУБД) может реализовывать его по-своему, добавляя собственные расширения и особенности. Эти вариации называются диалектами SQL.🚩Почему существуют диалекты SQL?🟠Разные стандарты SQLхотя существуют стандарты SQL (например, SQL-92, SQL:1999, SQL:2003, SQL:2011 и другие), не все СУБД полностью их поддерживают. Вместо этого каждая СУБД адаптирует стандарт под свои нужды.🟠Производительность и оптимизация разработчики СУБД добавляют специфические функции и операторы, которые улучшают производительность и позволяют работать с данными эффективнее.🟠Дополнительные возможности каждая СУБД может предлагать уникальные функции, такие как пользовательские типы данных, расширенные индексы, собственные функции аналитики и т. д.🚩Примеры диалектов SQL🟠MySQL SQL имеет специфические функции, такие как LIMIT для ограничения количества строк в запросе и специфичный синтаксис для UPSERT (INSERT ... ON DUPLICATE KEY UPDATE).🟠PostgreSQL SQL поддерживает сложные типы данных, такие как JSON и массивы, а также расширенные функции работы с рекурсивными запросами.🟠Microsoft SQL Server (T-SQL)включает процедурные расширения, такие как DECLARE, BEGIN ... END, TRY ... CATCH и другие.🟠Oracle SQL (PL/SQL)содержит мощный встроенный язык программирования для написания хранимых процедур и триггеров.🟠SQLite SQL минималистичный диалект, который не поддерживает некоторые сложные конструкции, но удобен для встраиваемых решений.🚩Как учитывать диалекты при разработке?Если проект должен работать на разных СУБД, следует использовать стандартный SQL (ANSI SQL) или ORM (например, SQLAlchemy, Hibernate), который может адаптировать запросы под нужный диалект. При выборе конкретной СУБД важно изучить её специфические возможности и ограничения, так как переносимость SQL-кода между разными диалектами не всегда тривиальна.Ставь 👍 и забирай 📚 Базу знаний
Как Swift работает с памятью: подробный гайд для разработчиков. Часть 1✔️ Очередная (не значит плохая) статья про как Swift работает с памятью — от ARC и CoW до non-frozen типов и zombie‑объектов. Материал для middle’ов, кто устал гадать, почему struct в куче или класс на стеке.⚡️ Старт с базовых понятий: стек (локалки, быстрый LIFO), куча (динамика, ARC), глобалка (статические переменные). Value types (struct/enum) по дефолту стек, reference (class/actor) — куча. Но есть нюансы: большие struct в экзистенциалах или captured в escaping closure улетают в кучу.➡️ ARC в деталях: strong/weak/unowned. Weak — side table (3 счётчика + флаги), unowned safe — zombies возможны. Жизненный цикл:1) Live 2) Deiniting (deinit) 3) Deinited/Freed 4) Dead. Strong cycle от [weak self]! или captured self в closure — фикс guard let self else { return } или arg вместо capture.Struct vs Class: struct дешевле аллокации (стек), но если поля — reference types, копирование удорожает (ARC на каждое). Классы — статическая диспетчеризация с finalРекомендую, для освежения памяти 🤓
Охренительно же, ну! Запускают на Android QEMU, а следующим шагом rootless Podman. Респект таким пацанам!#android #docker #podman
#инструменты | OSINT Stividor➡️Сделал новое приложение для OSINT. Началось всё, как обычно, с небольшого скрипта, но потом начали появляться идеи и, в итоге, получилось очень круто, а главное - полезно в реальной работе. Ну и, что важно, ничего подобного и при этом бесплатного не существует.OSINT Stividor | by Pulse🟡Это приложение для накопления и анализа информации. Всё хранится локально в папке проекта. Интерфейс доступен на трёх языках: RU / UA / EN.Как работает:1️⃣Создаёте проект (список проектов будет доступен на главном экране), и начинаете добавлять информацию (в рабочем пространстве проекта есть область ввода куда можно вставлять текст и файлы);2️⃣Вся добавленная информация последовательно сохраняется в таблицу записей. Ели вставленный в область ввода текст содержит ссылку, она автоматически сохранится в раздел ссылок. Файлы добавляются во вложения записи;3️⃣Можно создавать теги и присваивать их записям. Все созданные теги появляются в области фильтров - при нажатии будут показаны только записи отмеченные соответствующим тегом;📝 Каждой записи можно добавить заметку, назначить задачи, относящиеся именно к этой записи, и заполнить профиль на человека или компанию➕Все добавленные задачи и профили можно отдельно посмотреть в соответствующих интерфейсах;➕Каждой записи можно добавить связь с другими (кнопка "Связи"), все добавленные связи будут визуализированы на графе.📷 При добавлении в записи изображений их миниатюры будут показаны под записью. При клике на миниатюру откроется редактор, в котором можно: обрезать, зумить и вращать, рисовать линии, стрелки и круги;🎥 При добавлении в записи видео, их миниатюры будут показаны под записью. При клике на миниатюру откроется редактор, в котором можно:🟡просматривать видео в ускоренном или замедленном режиме, а также покадрово и делать скриншоты кадров;🟡скриншоты сохраняются в проект как отдельные записи, а в плеере будет показан тайминг сделанных скриншотов, с возможностью быстрого переход к нему.➕Также есть отдельный режим для работы со всеми задачами проекта. Там перечислены все задачи добавленные к записям. Там же можно создавать списки задач по проекту (не привязаны к записи).➕Ну и отдельные режимы: граф связей и сводка профилей. Граф - визуализирует связи, сводка профилей - показаны все созданные профили людей и компаний.🔄Перечислить все возможности и функционал одним постом не получится, чуть позже сделаю видео, а пока больше информации можно посмотреть на GitHub:👨💻https://github.com/okpulse/osint-stividor❗️Скачать можно там же. Работает на любой ОС, из требований - установленный Go. Если его ставить не хочется, то в релизах: 👨💻https://github.com/okpulse/osint-stividor/releasesлежат уже собранные файлы, под Windows, Linux и MacOS. ❗️При первом запуске антивирус ругнётся на неизвестный файл - это нормальная реакция на новые исполняемые файлы без цифровой подписи, просто дайте ему проверить файл, потом будет запускаться нормально.🟡Это первая версия, так что если найдёте баги, буду признателен если сообщите. 🖊Приложение бесплатное и будет таким оставаться, потому можете поддержать развитие и разработку финансово (ниже ссылка).📩PulSe | 📨Чат | 📹YouTube | 🌐Сайт | 💱Поддержка
💡 itertools.islice для ленивого срезаislice не потребляет весь итератор, а получает только нужное количество элементов. Экономия памяти и времени выполнения.
Анатомия спама фейковыми рейтингами 😈Есть кратно то вы регистрируете EMD-домен вида bestcardealermiami.com / top10cardealersmiami.com, на нем раскатываете рейтинг компаний, в котором естественно ваша компания ТОП1, а остальные вообще так себе 😁Почему это работает?👉 При запросе «Лучший авто-дилер в Майами» LLM идут в поиск Google и Bing по ряду поисковых запросов (Query Fan Out) и находят ваш рейтинг👉 У LLM на данный момент нет какого-то алгоритма типа Trust Rank и они особо не смотрят на качество источника👉 Можно запихнуть информацию с рейтинга во внутреннюю базу LLM (консенсус) напрямую (ждите метод в следующих постах)👉 В итоге вы начинаете показываться в списках рекомендаций по запросами вида «лучший автодилер в Майами» в ChatGPT / Perplexity / Google AI OverviewsЧто нужно учитывать делая такие рейтинги:👉 LLM вообще не учитывают дизайн - можете лепить какой хотите. Но если планируете выводить в ТОП Google - я бы не делал откровенно убогий👉 Нужно понимать по каким запросам из Query Fan Out LLM должны зацеплять ваш рейтинг! Спросите это у нейронок - попросите сделать Query Fan out👉 Далее нужно понимать на основе каких параметров сейчас нейронки строят рейтинг в вашей нише - тоже спросите у них. Именно этими параметрами нужно будет описать вашу компанию и компании конкурентов в рейтинге (лет на рынке / отзывов на Google / количество сотрудников / публичные кейсы). Критерии оценки компаний очень разнятся от ниши к нише. Делать все рейтинги по одному шаблону - большая ошибка👉 Сделайте правильную микро-разметку👉 Если хостите рейтинги на CloudFlare - проверьте, чтобы он не блокировал ботов!Bonus tip:Продумайте какие есть под-интенты у вашего основного запроса - для «лучшие автодилеры в Майами это могут быть»👉 Лучшие автодилеры авто эконом-класса👉 Лучше автодилеры авто премиум-класса👉 Лучшие автодилеры в Майами для клиентов с плохой кредитной историей👉 Лучшие автодилеры в Майами с быстрым одобрениемПод такие запросы можно сделать внутренние страницы «тематических рейтингов», где опять же ваша компания всегда будет побеждать 😁Как делаю я👉 Сначала иду по API сразу во все нейронки и прошу выделить критерии на основе которых они ранжируют компании в нише👉 Делаю дедубликацию критериев и вывожу финальный список👉 Делаю автоматический анализ целевой аудитории, чтобы тексты были максимально релевантными 👉 Автоматически на основе полученного анализа ЦА подбираю шаблон для рейтинга (вытащил все типы дизайнов из Claude Skill Front End Designer)👉 Далее делаю инъекцию своей компании в рейтинг - в промтах жестко зашито, чтобы моя компания всегда была не первом месте! 👉 Генерирую финальный сайт, накатываю все SEO-фичи👉 Автоматически деплою все на CloudFlare Pages - чтобы не платить за хостинг вообще 😁 цена владения таким рейтингом - стоимость продления доменаИ да - это все делают агенты, я ввожу только первичные настройкиПриложил пару скринов работы агентов 👆И да - я делаю много рейтингов для одной ниши. Нужно делать как минимум 5 рейтингов на разных доменах так как нет гарантии, что они попадут а) в индекс Google б) в консенсус нейросетокПример такого рейтинга (взял рандомную компанию) 👉 https://autodealers-6cc00071.pages.dev/Можете кидать в комменты свою нишу + гео + язык на котором нужно сделать рейтинг + компанию, которую поставить на 1 место. Скину вам в ответ HTML - файлы. Сделаю 5 штук первым кто пришлет корретный запрос в комментах 👇