Обновить
119.05

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

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

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

HackDay #25 в Нижнем Новгороде – теперь с конкурсом Intel

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

С 12 по 14 апреля в Нижнем Новгороде прошел очередной, 25-ый, конкурс разработчиков HackDay. За два рабочих дня, которые для всех остальных людей являются выходными, участникам предстояло воплотить заранее придуманную или тут же пришедшую в голову идею в более или менее работоспособный проект. Отличие этой итерации HackDay от предыдущих состояло в том, что компания Intel устроила тут нечто вроде «конкурса в конкурсе» и предложила программистам попробовать свои силы в создании приложений на Perceptual SDK. Победителя конкурса ждал хороший приз – ультрабук. Ну а теперь небольшой отчет о том, как все было.
Читать дальше →

Brainfuck на ленте с ячейками неограниченной разрядности

Время на прочтение3 мин
Охват и читатели1.8K
Возьмем машину, у которой система команд точно такая же, как в языке brainfuck, но которая работает на ленте, в ячейки которой можно поместить любые целые числа. Переполнения в арифметических операциях не происходит, команда "+", примененная к положительному числу, всегда даст положительный результат, и т.п. Спрашивается: можно ли работать на такой машине, какие возникнут проблемы и как их обойти?

Преимущества очевидны: раз нет переполнений, то нет нужды и в длинной арифметике, можно одинаково работать с массивами любой длины и т.п. Но довольно быстро мы замечаем, что наш любимый способ очистки ячейки ("[-]") не работает: если в ячейке было отрицательное значение, то программа зацикливается. Аналогично, мы не можем свободно использовать команду копирования "[->+<]" — она тоже работает только для неотрицательных чисел.

Получается, что при программировании нам надо внимательно следить за знаками содержимого ячеек (проще всего — не допускать появления отрицательных чисел вообще), а если возникнет число, знак которого неизвестен — работать с ним специальным образом

Здесь мы рассмотрим две задачи: во-первых, запрограммируем оператор «if(a>b) C; else D;» где a и b неотрицательны, а C и D — какие-то действия, а во-вторых, научимся обнулять, копировать и определять знак произвольного числа.

Читать дальше →

Альтернативные токены и триграфы в С++

Время на прочтение1 мин
Охват и читатели3.8K
Да-да-да, я понимаю, что для того, чтобы знать об альтернативных токенах надо всего лишь заглянуть в пункт 2.5 стандарта. В этом смысле, статья никому не нужна. Еще помню об этом рассказывал тов. Касперски.
Однако, смею предположить, что не совсем все знают, что писать hello world на cpp можно и так:
предаться изврату

Команда «жыбий рыр»: Войти в IT через хакатоны

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

Всем привет! Меня зовут Михаил — я студент и backend‑разработчик из Ростова‑на‑Дону. С 2021 года я хожу на хакатоны и уже принял участие в 16-ти, многие из которых были выиграны нашей командой. Этой статьей я хочу на собственном примере показать почему хакатоны — это классно и зачем в них участвовать начинающим специалистам.

Читать далее

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

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

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

Узнать тайну эволюции

NE-Executable | Разбор деталей часть 1 (Части заголовка)

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

Формат "Новых исполняемых" файлов называют сегментным. Даже в официальной документации Microsoft её заголовок это "Сегментный Новый Исполняемый формат" (ориг. "Segmented NEW Executable Format").

Этот сегментный формат программ поддерживал

Сегментную модель памяти;

Защищенный режим Intel 286+

Динамичкую компановку (Dynamic Linking);

Управление ресурсами;

Возможность экспорта и импорта определенных процедур.

Читать далее

Семь способов выхода из рекурсии

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

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

Читать далее

Как я гифку с помощью ИИ сжимал

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

Гифки + FFMPEG + Gemini 2.0 Flash Thinking Experimental = 🔥. Мой эксперимент по созданию софта для себя

Читать далее

Т-функция: подключаем логику к UI как к БД

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

Так, давайте еще раз.

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

Открытым остался вопрос: как ее к UI подключать?

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

В этой статье я разложу по полочкам само решение, как я к нему пришел и при чем тут Алан Тьюринг. А бонусом покажу как это все масштабируется и оставлю вас размышлять о том, почему мы не додумались до этого раньше (ну за 85 лет уже можно было бы).

Утонуть в тексте

О том как я генератор Brainfuck кода писал

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

Разбираемся в Brainfuck, Пишем для него генератор кода и интерпретатор

Или рассказ о том, как я решал легкую C задачку

Однако я решил что решать эту задачу привычным методом будет скучно и я решил слегка усложнить себе задачу, чтобы поинтереснее было. Так и появилась идея написать этот код на brainfuck, а на C интерпретатор для него.

Естественно делать это голыми руками будет больно и не приятно, поэтому я решил написать генератор brainfuck кода на Java.

Читать далее

Решаем головоломки и настраиваем среды Kubernetes: подборка новых языков программирования

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

В блоге beeline cloud мы уже делились дайджестом свежих DIY-материалов о контейнерах, DevOps и архитектуре. Сегодня расскажем, кто и зачем разрабатывает новые языки программирования — выбрали те, что появились на свет за последние три года. Некоторые из них написаны энтузиастами для решения головоломок на конкурсах, а другие — разработчиками крупных организаций для боевых задач.

Читать далее

Делаем crackme. Часть первая: whitebox AES

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

Эта статья первая из цикла, в котором мы будем создавать crackme для linux amd64. В crackme будут реализованы шифрование каждой функции отдельным ключём и наномиты для противодействия отладке. В данной статье мы рассмотрим алгоритм встраивания ключа шифрования в код для усложнения расшифровки функций пользователем. Если стало интересно, прошу под кат.

Читать далее

Платье с цветами на сервоприводах

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

Девушки в ИТ-сфере — не такое уж и редкое явление. Что интересно, даже будучи суровыми технарями, они сохраняют способность создавать какие-то красивые милые вещи. Так, например, Рехана Аль-Солтане (Rehana Al-Soltane) сшила элегантное вечернее платье с цветами, которые способны распускаться и закрываться по её команде. Да и корона у неё необычная. Интересно? Тогда давайте посмотрим, как всё это реализовано.

Читать далее

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

Небезопасный android часть 2: эксперименты с sun.misc.Unsafe

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

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

Читать далее

Небезопасный android часть 1: эксперименты с sun.misc.Unsafe

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

Java очень глубоко интегрирована в android и имеет в данной ОС свою нестандартную виртуальную машину — DVM/ART, поэтому многие детали реализации отличаются от привычных. А что насчёт внутреннего API sun.misc.Unsafe? В этом цикле статей с его помощью мы попытаемся максимально сломать виртуальную машину андроида.

Читать далее

Запускаем Kubernetes Ingress-контроллер c публичным ip на домашнем ноутбуке

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

Работа с Ingress-контроллерами обычно предполагает работу с Kubernetes в облаке, где внешние ip присваиваются автоматически. Я изучаю Kubernetes, обходясь обычным ноутбуком за NAT, на котором в виртуальных машинах запущены разные разновидности Kubernetes. Когда я разбирался с Ingress-контроллером, у меня возникло непреодолимое желание завести в него публичный ip и обратиться к нему извне. Давайте посмотрим, как это можно сделать.

Читать дальше →

Какие у нас есть клавиши в клавиатуре или как непрограммист язык разрабатывал

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

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

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

Возник выбор — прикручивать JS и SQL (как это делают нормальные люди) или разрабатывать собственный синтаксис. Я недолго подумал и решил, что собственный синтаксис лучше.

Хочу рассказать про некоторые моменты, которые стали понятны в этом процессе — может, вы передумаете делать свой DSL ?

Читать далее

FizzBuzz по-македонски

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

Long story short

Сеньоры начинают и проигрывают

Тут как на олимпийских играх - быстрее, короче, изящней.

В продолжение увлекательной дискуссии

FizzBuzz по-сениорски

FizzBuzz по-пенсионерски

Продолжаем разгонять FizzBuzz

Читать далее

Добавляем дополнительные особенности реализации на C++ с помощью «умных» оберток

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

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

Инструменты библиотеки feature позволяют наделить экземпляры объектов любого типа свойствами, которых у них изначально не существует. К таким свойствам можно отнести, например, ленивые вычисления (implicit shared и другое), потокобезопасность, выбор способа размещения объекта "по месту" или в "куче" и т.д.

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

Хотите узнать как? Прошу под кат.

В поисках компактного FizzBuzz на Python

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

Пришло время оживить преданный забвению FizzBuzz. Попробуем найти самое компактное решение FizzBuzz на Python.

Читать далее

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