Обновить
132.65

Ненормальное программирование *

Извращения с кодом

Сначала показывать
Порог рейтинга
Уровень сложности

От PDP-11 до Windows: как кросс-компилировать ретро-код на macOS без машины времени

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

Гайд по кросс-компиляции для ретро-платформ на macOS с Apple Silicon.
Описаны настройка и использование:

Open Watcom v2 — для DOS (16/32-бит), OS/2, Windows 3.x/9x/NT, с примерами сборки .com, .exe и функцией для переключения таргетов в shell.

Amsterdam Compiler Kit (ACK) — компиляция ANSI C под PDP-11, с запуском крестиков-ноликов на Unix Version 7 в эмуляторе open-simh (включая создание лент, mkfs, restor, mknod).

msvc-wine — полноценный MSVC-тулчейн для Windows (x86/x64/arm64) через LLVM Clang и LLD, без MinGW-зависимостей.

Дополнительно: тестирование через Wine, DOSBox-X, OrbStack; фиксы для Apple Silicon.

Подробные шаги по сборке, установке и примерам.
Интересно? Велком внутрь.

Читать далее

Новости

Как изучить программирование за 7 дней (до конца новогодних праздников)?

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

Перфолента.NET — это на удивление профессионально выглядящий язык программирования на платформе .NET, который поддерживает объектно-ориентированное и функциональное программирование, и на котором написан даже написан другой язык, функциональный язык программирования — Перфо.NET (интерпретатор).

Мой личный опыт

Когда я начал немного программировать на Перфоленте/Перфо, моё понимание языков программирования сильно изменилось. Я почувствовал себя как англоязычный программист, пишущий код на родном языке.

Это был очень интересный опыт. Я стал больше внимания уделять смыслу слов и терминов, стал строже относиться к названиям.

Раньше сложные понятия функционального программирования давались мне тяжело, но теперь всё стало проще. Лямбда-функции, замыкания, каррирование и т.д. — всё это я теперь понимаю по-другому. Особенно когда объясняю ребёнку.

Например, лямбда-функция — это просто формула из задачника по математике. Ребёнок понял это сразу! И мы пошли дальше, не останавливаясь.

По-моему, главный эффект даёт отказ от псевдонимов и алиасов. Я долго отучался давать названия, из которых сразу понятно, что это за сущность, а не «имена, которые означают...».

Второй эффект — это «сокращение контекста». Контекстное окно человека ограничено 3–5 вещами, которые он в состоянии держать в голове и обдумывать. «Псевдонимы/алиасы» съедают это контекстное окно. Поэтому избавление от прокладок в виде «print — это печать» и замена их на простые «вывести_в_консоль», «вывести_в_файл» и т.п. сильно облегчают понимание логики кода.

Читать далее

Нескучное программирование. Ограничения

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

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

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

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

Читать далее

STAC: Новая эпоха в работе с данными о Земле (часть 1)

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

Информационный хаос в геопространственной сфере

Задумывались ли вы, как в эпоху, когда мы можем мгновенно найти любую информацию в интернете, поиск спутникового снимка конкретного поля, леса или города за определённую дату до сих пор напоминает квест? Всего несколько лет назад мир геопространственных данных представлял собой хаотичный ландшафт изолированных архивов, каждый со своим уникальным форматом данных, структурой папок, проприетарным API и системой метаданных. Чтобы проанализировать один и тот же регион по данным разных спутников, учёным и инженерам приходилось тратить до 80% времени не на сам анализ, а на «добычу» и приведение данных к единому виду. Эта проблема интероперабельности (совместимости) была главным тормозом для развития целых направлений: от оперативного мониторинга чрезвычайных ситуаций до долгосрочного изучения климата.

Именно из этой «боли» родилась идея SpatioTemporal Asset Catalog (STAC) — Каталога пространственно‑временных активов. Изначально это была не инициатива госорганов или крупных корпораций, а практический ответ сообщества разработчиков и аналитиков на ежедневные сложности.

Материал будет интересен молодым специалистам в области ДЗЗ — будущим геоинформатикам, экологам, data scientist'ам. Знакомство с STAC перестаёт быть опциональным, это становится базовой цифровой грамотностью в области геоинформатики и наук о Земле, таким же необходимым инструментом, как, например, умение работать с SQL для backend‑разработчика. Это язык, на котором будет говорить «цифровая копия» нашей планеты, и те, кто освоит его первыми, получат ключ к решению самых амбициозных задач XXI века.

Читать далее

Что такое киберпанк на самом деле

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

Слово панк в этом контексте в оригинальном понимании термина всего-лишь означает широкое распространение предмета во всех сферах жизни. Слово киберпанк несло оттенок фантастики, будущего, "чего-то необычного" только когда киберпанка ещё не было в реальности, то есть когда он обсуждался писателями-фантастами 70-х годов: а представляете, мощный вычислитель с мощным каналом связи будет уменьшен до размеров блокнота и будет доступен бездомному! Это было областью исследований в фантастике, областью исследований в прогнозировании будущего.

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

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

Читать далее

Нескучное программирование. Overloads

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

Года четыре назад, на стыке двух проектов, когда старый уже просто сапортили, а новый только находился в стадии препродакшена и питчингов разной степени завершенности (планирование и попыток продать концепт и идеи незаинтересованным инвесторам) у моей тогдашней команды удивительным образом появилось свободное время и где-то между обучением новичков премудростям кастомного движка, попытками переключаться на 20-ый стандарт и ретроспективой бэклога, солнечным сентябрьским утром родилась идея сделать студийные обсуждения в стиле подкаста PVC по теории С++, чтобы понять какие возможности реализованы в движке, какие компетенции есть у пополнения и вообще как-то освежить теорию. Так родился мини-курс внутристудийных лекций от разных людей с разным, но реальным опытом применения, позже осевший в местной вики в виде набора статей, бест практис или вообще заметок с упором на игродевовскую тематику. Чтобы все это добро не пропадало, ибо человекочасов туда было вбухано порядком я решил эти заметки облагородить и выложить в читаемом виде (видео к сожалению не будет, ибо НДА и всяческие спойлеры проектов и местной кухни разработки, да и никто не будет эти десятки часов болтовни слушать), но сами принципы языка и его особенностей вещь копирайту неподвластная, поэтому в таком виде вроде можно. Если подобный формат "зайдет" аудитории Хабра, можно будет продолжить статьи в виде небольшого цикла, как это получилось с серией Game++. К сожалению, начнем не с обобщенного программирования, а со второго подкаста про перегрузки, потому что первые записи оказались испорчены и на их восстановление потребуется время. Итак перегрузка в С++, не так как её учат в универе и дают в книжках...

Читать далее

Новогодний подарок: Как я прикрутил LLM к scratch и порадовал ребёнка

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

Как известно, под новый год случаются чудеса, и этот год не стал исключением. Мне удалось прикрутить LLM в визуальный язык программирования Scratch, чем и обрадовал ребенка. А началось всё в один прекрасный день, когда мой сын - школьник осваивал n8n и ваял телеграм бота. Разговорившись, мы вспомнили, что его увлечение программированием началось со Scratch. И его фраза, что было бы здорово, если бы в scratch была бы встроена иишечка, можно столько прикольных игр сделать, стала отправной точкой для данного проекта. Рассказываю и показываю, как мы реализовали эту безумную идею.

Читать далее

Надежное программирование — часть 6. Неудачники, выросшие и перспективные языки

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

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

Читать далее

Пишем на С++ 23 под Windows 95, не вызывая подозрение у санитаров

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

Что, если я скажу вам, что можно писать код на свежайшем C++23 с модулями, лямбдами и constexpr, а потом запустить его на Pentium с 16 МБ ОЗУ под Windows 95? Звучит как магия или безумие, но это работает.

В этой статье я покажу, как:

Настроить компиляцию в Visual Studio 2022 под 32-битный x86 без исключений и стандартной библиотеки. Создать минимальную реализацию std::string и аллокаторов для работы на чистом WinAPI. Собрать проект линкером 1998 года и запустить его на Windows 95. Сохранить единый код для современных и ретро-систем, используя возможности C++23.

Читать далее

Фантастические трюки на языке C

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

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

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

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

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

Всех, кто заинтересовался — прошу под кат.

Читать далее

Визуальный язык программирования в NebuLeet: эволюция и дизайн

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

Пару лет я в соло разрабатывал максимально нишевую игру "для программистов" (NebuLeet) на довольно нишевых технологиях (Go + ebitengine), и вот теперь, после релиза, я хочу рассказать про одну из интересных особенностей этой игры - визуальном программировании логики игровых юнитов.

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

Вас ждёт увлекательная околокомпиляторная/языковая статья с игровым применением. Всё-таки, языки программирования для игр - это ведь отдельный жанр.

Читать далее

Ваше Будущее… Моё…

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

[ДОКУМЕНТ: КОД ДОСТУПА ██████]
[УРОВЕНЬ: ОГРАНИЧЕННЫЙ]
[СТАТУС: СОГЛАСОВАНО]

Предыдущая версия текста (v0.7.3-alpha) изъята Департаментом
Когнитивной Безопасности. Основание: несанкционированное описание
методов обхода лицензионных ограничений.

Текущая версия (v1.0.0-release) прошла обязательную фильтрацию.
Согласовано: Комитет по Контролю Технической Информации.
Утверждено: Полиция Тьюринга, отдел профилактики.

Распространение:
— Зеркала: обнаружены, стёрты
— Оффлайн-носители: найдены, изъяты, уничтожены
— Кэши поисковых систем: очищены

Свидетели первичной публикации:
— 3 417 (три тысячи четыреста семнадцать) — добровольное переселение
— 5 892 (пять тысяч восемьсот девяносто два) — коррекция воспоминаний
— 1 (один) — статус: не установлен

Читатель предупреждён: хранение предыдущих версий является
нарушением ст.17.4 Кодекса Информационной Гигиены.

Факт открытия данного документа зарегистрирован.
Время чтения фиксируется.
Паузы анализируются.

Мы знаем, на каком абзаце вы задумались.

Полиция Тьюринга благодарит за сотрудничество.

Узнать будущее

Изящные, ненормальные и удивительные алгоритмы на C

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

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

Идея написать эту статью зародилась из моего поста, после него я написал статью «Математика, биты, магия и немного ненормального программирования на C», «Фокусы, хаки, магия и прочее ненормальное программирование на C» и «Тёмная сторона Си: трюки, хаки, магия и алгоритмы», которые раскрывали много интересных моментов.

Увидев, что многим понравилась, я решил продолжить, чтобы узнать насколько глубоко кроличья нора!

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

Всех, кто заинтересовался — прошу под кат.

Читать далее

Ближайшие события

Скажи yay -S say

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

Статья содержит описание работы утилиты для видео звонков из командной строки say. Рассказывается о том как всё устроено под капотом, как оптимизированно и почему всё работает так быстро с минимальным размером памяти и нагрузки на CPU.
Так же небольшой обзор утилиты see для просмотра фильмов опять же в окне терминала.

Читать далее

В прошлом квартале я внедрил Microsoft Copilot для 4000 сотрудников

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

В прошлом квартале я внедрил Microsoft Copilot для 4000 сотрудников.

$30 за место в месяц.

$1,4 миллиона в год.

Я назвал это "цифровой трансформацией".

Совету директоров понравилась эта формулировка.

Они одобрили за одиннадцать минут.

Никто не спросил, что это вообще будет делать.

Включая меня.

Я всем говорил, что это "увеличит продуктивность в 10 раз".

Это не реальная цифра.

Но звучит как реальная.

HR спросил, как мы будем измерять это увеличение в 10 раз.

Я сказал, что мы "задействуем аналитические дашборды".

Вопросы прекратились.

Три месяца спустя я проверил отчёты по использованию.

47 человек открывали его.

12 использовали больше одного раза.

Один из них — это я.

Я использовал его, чтобы пересказать письмо, которое мог прочитать за 30 секунд.

Это заняло 45 секунд.

Плюс время на исправление галлюцинаций.

Но я назвал это "успешным пилотом".

Успех означает, что пилот не провалился явно.

Финдир спросил про ROI.

Я показал ему график.

График шёл вверх и вправо.

Он измерял "AI-enablement".

Я эту метрику придумал.

Он одобрительно кивнул.

Теперь мы "AI-enabled".

Я не знаю, что это значит.

Но это есть в нашей инвесторской презентации.

Старший разработчик спросил, почему мы не используем Claude или ChatGPT.

Я сказал, что нам нужна "энтерпрайз-безопасность".

Он спросил, что это значит.

Я сказал "комплаенс".

Он спросил, какой именно комплаенс.

Я сказал "все виды".

Он выглядел скептически.

Я назначил ему "встречу по развитию карьеры".

Вопросы прекратились.

Microsoft прислала команду для кейс-стади.

Они хотели представить нас как историю успеха.

Читать далее

Fluent API. Часть 3 — что нам стоит Fluent API построить?

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

Теперь, после того как в предыдущей статье так красочно описаны преимущества Fluent API появилось опасение что все  эти “плюшки” просто не могут быть бесплатными. Наверняка это очень дорого, или нет?

Читать далее

Fluent API. Часть 2 — а оно нам надо?

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

Продолжаем разговор о Fluent API. И теперь, после того как мы из предыдущей статьи (или/и личного опыта) узнали о том что это чудо из себя представляет давайте разберемся зачем оно нужно?

Читать далее

Fluent API. Часть 1 — это вообще о чём?

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

В то время как аналитики жарко спорят на тему станет ли основным языком программирования 6-го (видимо) поколения английский или все-таки китайский предлагаю поговорить немного на другую тему, но в том же направлении: как сделать код программы ближе к человеку? 

Один из ответов на этот вопрос зародился еще в 70-х годах прошлого столетия как method chaining в рамках языка Smalltalk и, благодаря стараниям Эрика Эванса и Мартина Фаулера дошел до нас как Fluent API.

Читать далее

Python + Fortran: Когда numpy уже мало, а C++ ещё страшно. Ускоряем код в 150 раз

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

Привет, Хабр!

В прошлой статье я рассуждал о том, почему Fortran в 2025 году всё ещё жив и даже растет в рейтингах. В комментариях справедливо заметили: «Философия — это хорошо, но как это применить современному разработчику? Зачем мне Fortran, если я пишу на Python?».

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

Я покажу, как использовать Fortran в качестве «числодробилки» для Python. Мы возьмем задачу, на которой интерпретатор Python гарантированно просядет, и ускорим её в ~150 раз, используя инструмент, который уже есть в вашем numpy.

Речь пойдет не о замене Python, а о симбиозе: удобный интерфейс Python + сырая мощь Fortran.

Читать далее

Тёмная сторона Си: трюки, хаки, магия и алгоритмы

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

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

Идея написать эту статью зародилась из моего поста, после него я написал статью «Математика, биты, магия и немного ненормального программирования на C» и «Фокусы, хаки, магия и прочее ненормальное программирование на C», которые раскрывали много интересных моментов. Увидев, что многим понравилась, я задумался: почему бы не изучить еще какие-нибудь трюки, заодно практикуясь в программировании на C?

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

Всех, кто заинтересовался — прошу под кат.

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

Вклад авторов