Как стать автором
Обновить
132.28

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

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

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

Шеф, всё пропало

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

Ошибки программистов C++ — это отдельный вид искусства, вроде бы простой язык, но стоит отвлечься на чашечку кофе, как компилятор начинает вываливать простыню ворнингов пополам с ошибками, и иногда это больше похоже на древнеегипетские письмена, чем на нормальный выхлоп. Вы наверное и сами не раз сталкивались с разыменованием nullptr или перепутали (= и ==) по недосмотру. Часто причиной ошибкой является лень или невнимательность, или усталость - не зря появились суеверия "не комитить в пятницу вечером", "не кодить в состоянии изменного сознания" или "избегать кода под кофейным угаром", ну это когда три-четыре кружечки кофе навернул и пошел нести добрый код направо и налево.

Вообще статья планировалась про то как можно поиздеваться над switch оператором - была у меня запись разговора с одного питерского митапа, проходившего несколько лет назад и где присутствующим предложили написать "невозможный", но работающий код со switch. И вот в поисках этой записи я наткнулся на файл с описанием "пятничных" багов и комитов, которые бы в трезвом уме посреди недели врядли бы проскочили в мастер. А еще была статья тоже про ошибки "Федя, дичь", где уважаемый хабрачитатель угадывал причину разных ошибок, явных или не очень. Поэтому я решил продолжить в том же стиле, вопрос - ответ, а вам предлагаю также поучаствовать в отгадывании возможных причин. Все примеры из реальных проектов, игр, движков и пятничных комитов.

C++ не прощает ошибок, но именно в этом его "шарм". В большинстве приведенных примеров сохранен стиль и названия параметров, только немного подчищены коментарии, дабы не палить контору.

Поотгадывать баги, выпить чашечку кофе...
Всего голосов 16: ↑16 и ↓0+23
Комментарии37

Новости

Пилим движок Arcanum. Урок 03. Работа с памятью, используем полиморфные аллокаторы

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

Приветствую Хабравчане!

Продолжаем мучить разрабатывать движок для моей любимой игры Arcanum. В данном уроке расскажу, как движок управляет памятью и какие паттерны и подходы использует. Напишем свою мини реализацию полиморфных аллокаторов из С++ 17. Расскажу о некоторых оптимизациях в движке.

Читать
Всего голосов 10: ↑9 и ↓1+10
Комментарии4

Некоторые малоизвестные фичи, фокусы и причуды языка C

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

В этом посте разобраны некоторые фокусы, причуды и фичи языка C (некоторые из них – весьма фундаментальные!), которые, казалось бы, могут сбить с толку даже опытного разработчика. Поэтому я потрудился сделать за вас грязную работу и (в произвольном порядке) собрал некоторые из них в этом посте. Примеры сопровождаются ещё более вольными краткими пояснениями и/или листингами (некоторые из них цитируются).

Конечно же, здесь я не берусь перечислять абсолютно всё, так как факты из разряда «функция nan() не может устанавливать errno, поскольку в определённых ситуациях поведёт себя как strtod()» не слишком интересны.

ВНИМАНИЕ: сам факт попадания тех или иных вещей в эту подборку  не означает автоматически, что я рекомендую или, наоборот, не рекомендую ими пользоваться! Некоторые из приведённых примеров никогда не должны просачиваться за пределы списков наподобие этого, тогда как другие примеры невероятно полезны! Уверен, что могу положиться на ваш здравый смысл, дорогие читатели.

Читать далее
Всего голосов 68: ↑67 и ↓1+85
Комментарии44

Интересные ИТ-новости за сентябрь, которые вы могли пропустить

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

«Мир изменился. Я чувствую это в воде, чувствую в земле, ощущаю в воздухе…». А что именно такого случилось в сентябре, расскажу я — Андрей Аврамчук из МТС Диджитал.

Мы живем в мире новостей, но иногда интереснее попробовать понять, что находится за ними. Для этого я разбил новости на несколько групп. Под катом узнаете, что там с освоением космоса частными компаниями, как ИИ распознает пение китов и насколько быстро (нет) Linux работает на базе процессора Intel 4004, выпущенного в 1971 году. Поехали!

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

Истории

Ruby и встраиваемые системы

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

Казалось бы, какое отношение «хипстерские скрипты для веб» могут иметь к жестоким реалиям embedded‑разработки, со всей их низкоуровневой работой и ограниченными ресурсами? Но реальность в очередной раз оказалась куда интересней предубеждений, так появилась на свет эта статья.

Читать далее
Всего голосов 10: ↑8 и ↓2+12
Комментарии11

Автоматизируем подключение Сisco AnyConnect на Mac OS

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

Так сложилось, что у меня на работе используется Cisco AnyConnect Secure Mobility Client. Периодически приходится подключаться к рабочему VPN используя эту программу. Мне, как человеку постоянно работающему в терминале, захотелось иметь под рукой консольную утилиту, которая сама введет пароль и TOTP, после чего инициирует подключение.

Как это сделать?
Всего голосов 5: ↑5 и ↓0+9
Комментарии19

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

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

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

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

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

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

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

Программист-4chan'овец

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

Мы используем Go для создания Dolt, первая в мире БД SQL с контролем версий. Как и большинство кодовых баз, основанных Go, мы используем каналы и горутины(от переводчика, автора этой статьи на Хабре: у меня есть хорошая статья на тему параллелизма в Go) для реализации параллелизма. Как правило мы используем эти конструкции очень скучным и обычным путем, ведь параллелизм и так сложен без всяких выдумок. Но в одном месте мы все-таки взяли маленький кусочек кода из другого open-source проекта, который использует каналы очень интересным способом...

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

«Голая Java» или разработка без всего

Уровень сложностиСложный
Время на прочтение33 мин
Количество просмотров21K

Рассказываю что можно сделать на одном только голом JDK. Это старое и ныне почти забытое искусство разработки без внешних библиотек и фреймворков. Работать будем «как в былинные времена» — киркой и лопатой голыми руками и немного мозгом.

Читать далее
Всего голосов 72: ↑66 и ↓6+78
Комментарии107

Основы Whitespace: невидимого языка программирования

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

Привет, Хабр! Сегодня я расскажу про whitespace.

Whitespace — это уникальный язык программирования, который использует в качестве своего алфавита только непечатные символы: пробелы, табуляцию и новые строки. Этот эзотерический язык был создан Эдвином Брэди и Крисом Моррисом в 2003 и, разумеется, не предназначен для практического применения, существуя как определенный вызов для программистов — мол, попробуй отладить невидимый код.

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

И в этой статье мы рассмотрим базовые принципы этого безумного языка.

Читать далее
Всего голосов 19: ↑18 и ↓1+25
Комментарии17

Как GPT-4o помог мне создать плагин для After Effects: экономим часы на нейминге слоев

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

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

Читать далее
Всего голосов 14: ↑13 и ↓1+19
Комментарии8

Насколько нейросеть — хороший калькулятор?

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

Насколько опасно умножать числа с помощью ChatGPT и OpenAI o1-preview, насколько можно доверять вычисленным ей константам? Стоит ли тратить деньги на o1-preview, если есть mini (в контексте умножения чисел)? Мини-исследование под катом.

Читать далее
Всего голосов 15: ↑8 и ↓7+6
Комментарии32

Путешествие Embox на AMUR

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

Всем привет. Embox продолжает своё путешествие по отечественным микропроцессорам. В этой серии мы опишем путешествие на AMUR (MIK32). Кто не знает, это — полностью отечественный микроконтроллер К1948ВК018 на архитектуре RISC‑V, который производится в РФ на мощностях компании МИКРОН, входящей в ГК «Элемент».

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

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

3 – 18 октября
Kokoc Hackathon 2024
Онлайн
10 – 11 октября
HR IT & Team Lead конференция «Битва за IT-таланты»
МоскваОнлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн

Секреты Тима Фоллина, бипер, Спектрум и QChan

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

Сегодня — экстремальный geek out: максимально узкоспециальная тема с запутанным кодом на ассемблере Z80. Раскроем секреты Тима Фоллина в «биперной» музыке на Sinclair ZX Spectrum 48K, попытаемся повторить, а может быть и превзойти его достижения. Некогда объяснять, разберёмся по ходу кода!
Читать дальше →
Всего голосов 64: ↑64 и ↓0+90
Комментарии54

SQL HowTo: загадка Эйнштейна, или снова Джиндош

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

Пару дней назад был опубликован пост с решением на MySQL загадки Джиндоша (она же загадка Эйнштейна).

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

Поэтому я попробовал решить эту задачу "в общем виде", используя возможности PostgreSQL, и вот что из этого получилось.

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

Space Invaders в 2 строчки кода (c#)

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

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

Игра представляет собой вольный ремейк культовой игры, выпущенной в 1978 году.

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

Как говорится:
Везет программистам, захотел поиграть - написал игру.

Друзья, в статье есть тег - Юмор, не стоит использовать такое в продакшене.

Update1: Добавил описание методик, используемых для сжатия кода.

Читать далее
Всего голосов 20: ↑16 и ↓4+17
Комментарии10

Ещё слово о процедурной графике

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

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

Первая работа называется Way и написана для платформы Sony Playstation 1 (PSX) на ассемблере MIPS R3000.

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

Решаем загадку Джиндоша из Dishonored 2 на SQL перебором с возвратом

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


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

Сегодня мы рассмотрим решение непростой загадки Джиндоша из замечательной игры Dishonored 2 с помощью SQL.
SQL Может Многое!
Всего голосов 71: ↑71 и ↓0+91
Комментарии38

Почему важен процесс а не результат?

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

Инициализация переменных -- они же понятия, которые и так всем очевидны, но о которых никто договориться не может. Нет, я не трачу время и не задерживаю тут всех подряд, и не умничаю, хотя казалось бы… просто чтобы увидеть то что вижу я, нужно как минимум стоять вот здесь и смотреть вот сюда, через вот эту щёлочку. Если вы будете смотреть в другом месте и в другую щёлочку (потому что вы лучше знаете как нужно смотреть в щёлочки), то конечно вы вряд ли увидите тоже самое, что вижу я. Для вас будет ответ совсем скоро.

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

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

Читать далее
Всего голосов 24: ↑2 и ↓22-20
Комментарии17

WebP — формат сжатия веб-страниц

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

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

Вот только есть один нюанс, который ставит мне палки в колёса и не даёт сделать блог лёгким как пёрышко.

Читать далее
Всего голосов 54: ↑52 и ↓2+64
Комментарии53
1
23 ...

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