Обновить
4
0

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

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

«Логикомикс»: драма логики, математики и философии

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

Статья посвящена графической новелле «Логикомикс. Поиск истины» Апостолоса Доксиадиса — произведению о математике, логике, философии и человеческих драмах, возникающих вокруг стремлений обрести интеллектуальную опору.

Читать далее

Chrome, Xfce и очень страшное кино

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

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

Читать далее

Тайна самой дешевой Linux-консоли с Ozon

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

Недавно на просторах маркетплейсов появилась невиданная ранее диковинка - ретро-консоль с Linux на борту под немудреным названием R36s. На первый взгляд кажется что это очередная нонейм-консоль собранная из неликвидных комплектующих, однако при детальном рассмотрении выясняется, что это очень мощный гаджет не только для любителей ретро-игр, но и для гиков!

Сейчас консоль стоит на маркетплейсах всего 1.800 рублей. Но если бы всё так было просто... Если вам интересно узнать, откуда в 2025 году взялся 2х-ядерный MIPS с частотой 1ГГц, что представляет из себя R36s на практике и как не запутаться в великом множестве ревизий — жду вас под катом!

Читать далее

Специальные функции-члены в C++

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

Продолжаем серию «C++, копаем вглубь». Цель этой серии — рассказать максимально подробно о разных особенностях языка, возможно довольно специфичных. Это девятая статья из серии, список предыдущих статей приведен в разделе 6. Серия ориентирована на программистов, имеющих определенный опыт работы на C++. Данная статья посвящена специальным функциям-членам.

В C++ жизненный цикл экземпляра класса/структуры/объединения (объект, представляемый в коде переменной) начинается с инициализации, то есть задания его начального состояния. Далее, почти всегда, объект копируется, выполняются присваивания или их перемещающие аналоги. Эти операции необходимы для работы функций, контейнеров, алгоритмов. Финальной точкой жизненного цикла объекта является его уничтожение. Именно для поддержки этих операций в C++ и предназначены специальные функции-члены.

Важная особенность специальных функций-членов — это то, что в их реализации принимает участие компилятор. Реализации специальной функции-члена частично (а в ряде случаев и полностью) может быть сгенерирована компилятором. Кроме того, во многих случаях программист не вызывает явно специальные функции-члены в своем коде, эти вызовы генерируются компилятором в определенном контексте.

Итак, попробуем рассказать о специальных функциях-членах максимально подробно.

Читать далее

Форматируем строку по-человечески: C++ и его <format>

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

Когда-то давным-давно (то есть до C++20) мы форматировали вывод либо по-старинке через printf, либо используя громоздкие стримы ввода-вывода из <iostream>. Оба подхода, мягко говоря, не очень. printf работал шустро и лаконично, но требовал строгого соответствия типов, забудешь правильный %d или %s в формате, и получишь неопределённое поведение вплоть до падения программы. Компиляторы иногда предупреждают о несоответствиях, но полностью проблему не решают (особенно если форматируемая строка не литерал). Кроме того, printf не умеет выводить пользовательские классы, только примитивы.

Сейчас ситуация изменилась. В C++20 завезли библиотеку <format>, современный подход к форматированию строк, сочетающий лаконичность printf с безопасностью iostream. Инструмент называется std::format и объявлен в заголовке <format>. По сути, это адаптация популярной библиотеки fmt.

Читать далее

Алгоритмы на графах

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

Краткое и доступное руководство по базовым алгоритмам на графах: BFS, DFS, топологической сортировке и алгоритму Дейкстры. Чёткие объяснения, примеры и код на C++ — для тех, кто хочет быстро и уверенно освоить фундамент графовых алгоритмов.

Узнать больше об алгоритмах

Retro68: если вам скучно жить на свете

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

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

Видимо по этой причине, одним мрачным осенним днем мне захотелось создать графическое приложение на современном C++ под.. классический Mac из 90х.

Читать далее

Часы, минуты и секунды: как люди нарезали сутки с древности до наших дней?

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

Как и семидневная неделя, о которой мы говорили в прошлый раз, разделение суток на 24 часа, в каждом из которых по 60 минут, давно уже стало мировым стандартом. Но почему часов ровно 24, а минут в них — именно 60? И почему при этом на циферблатах почти всех механических часов не 24, а 12 делений? Попробуем разобраться.

Читать далее

Логическая головоломка из университетского квеста

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

Психоаналитикс – одна из интересных головоломок игры Puzzle Hunt Мельбурнского университета 2013 года. Сюжет игры в том году был основан на персонажах комиксов про Астерикса и Обеликса, а каждая ее головоломка была связана с одним из жителей деревни галлов или одним из римлян. Психоаналитикс – один из жителей деревни. Его головоломка была частью пятого акта игры. Ей предшествовало изображение этого персонажа, а также его краткое описание: «Друид-первопроходец Психоаналитикс пришел к выводу, что именно взаимодействие между левым и правым полушариями мозга играет ключевую роль в формировании мыслей».

Читать далее

Искусство выжить. Простое руководство для настоящих программистов

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

Задача Эдсгера Дейкстры о философах – великая задача великого программиста. Уж сколько лет, а она актуальна. Решая ее, прикасаешься к этому величию. И вот, перефразируя известное, «давно не было такого и вот опять», можно познакомиться с ее «новым прочтением» на Хабре[1].

Ну, как новое?… Но она стала тем триггером, который подвигнул меня к очередной попытке ее решения. Тем более, что с момента знакомства с философами пролетела уйма лет, а в  багаже - опыт применения автоматной модели и значительно усовершенствованная среда их реализации.

Познакомился с проблемой обедающих философов – Dinning Philosopher Problem (DPP), я более двадцати лет тому назад (про DPP см. [2]). Результатом стала статья, в которой философы выполняли поставленную задачу, как минимум, не хуже, чем классические алгоритмы сортировок[3]. Позднее был сделан доклад на конференции по параллельным вычислениям в Саратове, где на суд научной общественности была предъявлена модель автоматных параллельных вычислений и пример ее приложения - задача Дейкстры[4].  

Замечание 1. В рамках обсуждения статьи на Хабре было проигнорировано  предложение поручить сортировку философам. Зря, конечно, т.к. надо же как-то убедиться, что предлагаемое решение работает хотя бы в первом приближении. К примеру, тот же DeepSeek, моментально выдавший свое решение DPP, так и не смог заставить их сортировать.

Не знаю, считается ли данная задача решенной, но то, с чем я знаком, по большей части беглое рассмотрение проблем, которые она отражает. У задачи есть теория, которая представлена монографией Хоара[5], или моделями сетей Петри у Питерсона[6] и В.Е. Котова[7] или другими подобными публикациям. Но, повторюсь, все это по большей части достаточно краткий анализ свойств модели и/или даже конкретного решения. Статья на Хабре из этой же серии. Все это ни как не окончательное решение описываемых ею проблем параллелизма. Правда, может, [авторами] вопрос так и не ставился, но все же ответ на него весьма желательно иметь.

Читать далее

Вайб-кодим локальный мультимедийный сервер на C++ и Vue.js

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

У каждого из нас на жестких дисках копятся терабайты контента. Фильмы, скачанные «про запас», архивы семейных видео, гигабайты музыки во FLAC, которую жалко удалять, и тысячи фотографий. Но есть проблема: потреблять этот контент локально — неудобно. Когда дома лежит большой медиа‑архив — фотографии за годы, фильмы, музыка, куча видео — начинаешь задумываться, что работать с этим напрямую через файловую систему совсем не удобно. Особенно в эпоху, когда интерфейсы крупных медиа‑сервисов настолько продуманы, что сами по себе стали стандартом UX.

Я поставил перед собой задачу: сделать полноценный мультимедийный сервер, который работает из одного .exe файла, не требует интернета, не требует настройки и предоставляет удобный интерфейс.

Читать далее

«Паяем правильно и точно» — тест-драйв набора DIY для детей

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

Привет, хабровчане! На связи руководитель проектов редакции компьютерной литературы издательства «БХВ» @Holmogorov Признаюсь честно: паять я люблю, но не сказать, что умею это делать профессионально. Так, в состоянии починить ёлочную гирлянду или водрузить на место отвалившийся конденсатор в блоке питания. Поэтому когда у нас в «БХВ» придумали детский набор «Паяем правильно и точно. Уроки мастера + 4 набора для пайки», я сразу решил взять его на тест-драйв. Благо, все необходимое для «ходовых испытаний» у меня в наличии имеется: ребенок мужского пола, никогда до этого не державший паяльник в руках, и я, который хотя бы приблизительно помнит, как этот самый паяльник выглядит. Тем более, набор изобретали совершенно другие люди в совершенно другом подразделении нашей компании, поэтому я могу без особых угрызений совести изучать его более-менее непредвзято и писать про него гадости обзоры.

Погнали!

Зоопарк строк в вашем C++ коде?

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

CryEngine2 использовал класс собственный CString для реализации работы со строками и немного использовал строки из стандартной строковой библиотеки Windows. Насколько я помню, последняя версия CryEngine всё ещё использует те же самые CString, она кардинально поменялась внутри, но как дань истории название класса менять не стали, зато сильно расширили функционал. Я не на 100% уверен, применялся ли CString только в редакторе или в рантайме игры тоже, вы можете сами это посмотреть в исходниках, которые все еще доступны на гитхабе. Это один подход к работе со строками, довольно распространенный в мире игростроя - когда мы все нужное пишем сами, не оглядываясь... хотя, тут больше уместно слово поглядывая, на существующие реализации и утаскивая в проект все самое лучшее.

Есть и другой подход... Я работал в команде над некоторым проектом, который должен был выйти на консолях, и в какой‑то момент на проект пришел эффективный тимлид, который хорошо умел в красивые презентации, и продавил использование std::string из sdk. Все очень опытные программисты, синьоры и руководство важно кивали на совещании и согласились всё перевести на std::string… не такие уж они оказались опытные, как выяснилось. В итоге мы заменили большую часть CString на std::string. Не сказал бы, что это сильно повлияло на время компиляции — плюс‑минус минута к проекту, который собирается двадцать минут, особой погоды не делают, но это также превратило наш довольно понятный базовый код в запутанный кошмар. Возможно, для переносимости это было лучше, но ни наш проект, ни CryEngine2 Editor так и не были портированы ни на Linux, ни на какую‑либо другую платформу.

Прошло десять лет, я вижу ровно туже ситуацию на текущем проекте — новый тимлид решил перевести местный MySuperPupeString на std::string, уже предчувствуя «нижней чуйкой» последствия — запасаюсь попкорном и беру отпуск на следующий месяц после принятия решения. Но не это интересно, а то — какие вообще строки могут быть в вашем с++ коде.

Строка, на строке и строкой погоняет

Три интересные логические задачи

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

Доброго дня, всем любителям математики! Представляю вашему вниманию еще три интересные, на мой взгляд, логические задачи. Первая часть находится здесь. Спасибо всем, кто участвовал в обсуждениях и находил неточности! Итак,

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

Наложим график функции зависимости координаты путника от времени дня в первый и второй день. Эти графики пересекутся в искомой точке.

Читать далее

Гипотеза о роли скрытого описательного языка в механизмах мышления и о том, как у этого языка появляется смысл

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

 Я знаю, это будет звучать громко и самонадеянно, но все-таки я это скажу: мне кажется, я нашел ключик к проблеме объяснения и конструирования мышления. Нет, это еще не решение всей проблемы, но многообещающая возможность к нему приблизиться. Полгода назад у меня возникла идея, что в основе феномена мышления (даже у «низкоразвитых» животных вроде крабов или мышей) может лежать оперирование особого класса описательной языкоподобной структурой. Я попытался развить этот подход и обнаружил, что он как будто бы позволяет сформулировать много важных философских проблем о мышлении в виде точных математических вопросов. С тех пор мне удалось продвинутся в решении некоторых из них и получить несколько интересных, на мой взгляд, результатов на стыке логики и психологии. Я собираюсь написать серию статей, чтобы поделиться своими находками и привлечь энтузиастов вместе исследовать возможности, которые они открывают. Перед вами первая статья из этой серии.

Познакомиться с исследованием

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

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

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

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

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

Читать далее

Логическая головоломка от основателя Wikileaks Джулиана Ассанжа

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

Детектив — одна из головоломок игры Puzzle Hunt Мельбурнского университета 2005 года, в создании которой принял участие основатель Wikileaks, и вероятный организатор сообщества Cicada 3301Джулиан Ассанж. По сюжету игры вы оказываетесь внутри таинственного мрачного замка, где становитесь свидетелем странного разговора. В обсуждении принимают участие 7 человек, причем все они разговаривают на разных языках. Один из них — хозяин замка; он говорит на английском. Другие 6 человек — его гости; они говорят на китайском, голландском, французском, немецком, итальянском и японском. По всей видимости, в замке произошло ужасное преступление, и хозяин подозревает кого-то из гостей. Все вместе они пытаются распутать это дело...

Читать далее

Заводной абрикос

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

Помимо всем известной Apple, на свете существовала еще одна «фруктовая» компания, выпускавшая очень популярные компьютеры.

И сейчас мы цинично оживим и запустим эмулятор этих замечательных машин.

Читать далее

Стандартная модель. От симметрий к кваркам

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

Стандартная модель часто выглядит как странный зоопарк частиц: шесть кварков, шесть лептонов, восемь глюонов, W и Z, фотон, Хиггс… Но если смотреть на неё не как на таблицу, а как на язык симметрий, оказывается, что это очень жёсткая и экономичная конструкция.

В этой статье я продолжаю цикл про «Теорию всего» и разбираю Стандартную модель как минимальную калибровочную квантовую теорию поля. Мы начинаем с симметрий Пуанкаре и внутренних групп SU(3)×SU(2)×U(1), показываем, как из них неизбежно рождаются глюоны, W/Z и фотон. Потом разбираем фермионный сектор: кварки и лептоны как представления этих групп, левый/правый, поколения. Отдельная часть посвящена Хиггсу — не как «шайбе массой 125 ГэВ», а как механизму, который даёт массы W/Z и фермионам, не разрушая калибровочную структуру.

В финале обсуждаем аномалии, BRST-симметрию и ренормгруппу: как требования отмены аномалий фиксируют дробные гиперзаряды и структуру поколений, почему QCD оказывается асимптотически свободной, а калибровочные константы почти унифицируются на высоких энергиях. Цель статьи — показать читателю с физмат-бэкграундом, что Стандартная модель — это не случайный набор формул, а почти единственный самосогласованный способ устроить наш мир из симметрий, который не ломается ни на уровне математики, ни на уровне эксперимента.

Читать далее

Вводная глава учебника по матанализу нового типа

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

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

Я здесь, чтобы сказать вам: дело было не в вас.

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

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

«Напиши учебник. Тот самый, который мы заслужили».

Что ж, это он. Глава первая. Забудьте всё, что вы знали. Мы начинаем с нуля.

Мы отправимся в путешествие к самым основам человеческого мышления. Мы увидим, как драма, начавшаяся 2500 лет назад с простого вопроса о летящей стреле, породила всю современную науку — от физики до нейросетей.

Пристегнитесь. Мы погружаемся.

Читать далее
1
23 ...

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность