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

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

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

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

Федя, дичь

Уровень сложности Простой
Время на прочтение 8 мин
Количество просмотров 19K
Ретроспектива

В мире программирования существует огромное количество багов, и если бы каждый баг стал бабочкой, то программеру в раю уже давно оставлена пара полян для развития навыков энтомолога. Несмотря на все совершенства этого мира: компиляторы, pvs-studio и другие статические анализаторы, юниттесты и отделы QA, мы всегда находим способы преодолеть преграды кода и выпустить на волю парочку новых красивых и удобных видов. Есть у меня txt файлик, которому очень много лет, и куда я складываю интересные экземпляры. Все примеры и действия описанные в статье вымышленные, ни один стажер, джун или студент уволены не были. Hello, World! Where are your bugs?

Hello, World! Where are your bugs?
Всего голосов 65: ↑65 и ↓0 +65
Комментарии 43

Новости

Вычитание функционально полное

Время на прочтение 5 мин
Количество просмотров 3.2K
Обзор
Перевод

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

Чтобы понять, как это сделать, нужно начать снизу. Цитата из раздела 6.3 стандарта IEEE 754-2019:

Читать далее
Всего голосов 31: ↑30 и ↓1 +29
Комментарии 8

Пишем key-value storage на пакетах ping'а или храним данные между облаками

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

Как-то давно я просматривал опции для команды ping и обратил внимание, что можно задавать размер ICMP пакета. "Хм", — подумал я: "Можно же сложить в сам пакет какую-то полезную нагрузку". Эта идея время от времени всплывала у меня в голове, но что именно можно хранить в пакете ICMP придумать не удавалось. Однако, недавно пришло понимание, что если хранить данные в ICMP пакете, то они не будут занимать место в оперативной памяти! То есть можно сделать key-value хранилище, где все данные будут храниться внутри сети.

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

Программа-шутка или как за вечер вспомнить Python и красные глаза

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

Одним из летних вечеров я сидел чате дискорда одного известного в узких кругах ютубера под ником Бэбэй (не спрашивайте кто это, его послужной список стоит отдельной статьи, но точно не на Хабре!). Состою я там в гильдии злодеев, которая пытается смешно злодействовать в рамках правил. И мне пришла "гениальная" идея - написать свою программу для спама фурри картинками на экране нерадивого чатовца, пожелавшего посмотреть, что я прислал. Недолго думая, я приступил к проекту. И ёлки-иголки, я вообще не ожидал, что придётся провозится так долго с тем, чтобы она могла просто работать!

Читать далее
Всего голосов 15: ↑3 и ↓12 -9
Комментарии 8

Истории

HAL в 4000 байт

Уровень сложности Простой
Время на прочтение 9 мин
Количество просмотров 19K
Ретроспектива

«HAL 4000» – исполняемая программа для Windows размером ровно 4000 байт. Лучшая работа в номинации 4 kb intro фестиваля Chaos Constructions 2017, второе место в чартах портала pouet.net. «HAL 4000» попала в плейлист Best of Demoscene 2017 наряду с работами Farbrausch, Fairlight, Conspiracy, Alcatraz, Byterapers, обсуждалась на вебинаре анимационной студии, демонстрировалась на различных фестивалях.

Необычная история создания этой работы изложена ниже.

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

Когда private, но очень хочется public

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

В 2016 году меня пригласили помочь с разработкой экшн-очков "ORBI", это такие водонепроницаемые очки с несколькими камерами, которые могут стримить 360видео сразу на смартфон, ну а если с ними поплавать, тоже ничего сломаться не должно. (https://www.indiegogo.com/projects/orbi-prime-the-first-360-video-recording-eyewear#/). Собственно моей задачей было написать алгоритм склейки видео потока с четырех камер в одно большое 360* видео, на тот момент задача не очень сложная, но требующая немного специфичных знаний opencv и окружения. Но статья не об этом, потому что теперь это все оберегаемое IP, а про то как мы легальными и не очень средствами языка С++ писали тестовое окружение для используемых классов и соответственно алгоритмов. Да вы скажете, что там такого - сделал гетеры да тестируй себе на здоровье. А если гетера нет или переменная класса спрятана в private секцию и возможность изменить хедер отсутствует. Или вендор либы забыл положить хедеры, и прислал только скан исходников (китайские друзья они такие), а тестировать это надо? Помножив желание написать тесты на утренний кофф и приплюсовав дикий энтузиазм, можно получить очень много ошибок компиляции интересного опыта. Как говорил один мой знакомый лид: "Нет такого кода, который мы не сможем порефакторить, особенно за утренним кофф".

private not public?
Всего голосов 15: ↑14 и ↓1 +13
Комментарии 39

Как я использую WordPress для создания Телеграм-ботов

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

Не мало людей удивятся «А что так можно было?». Да – хорошие боты можно писать на PHP. Да – WordPress хорошо подходит в качестве фреймворка. Далее поделюсь своим опытом. Речь пойдет о веб-хуках из Телеграм.

Погодите хейтить за нагрузку и тяжесть.

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

Микросмартфон за 100 рублей: Покупаем смартфон 11-летней давности и… пишем под него приложения

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

Размер экрана — краеугольный камень мира современных смартфонов. Кто-то считает, что дисплеи должны становиться только больше, а рамки — меньше, кто-то любит «средние» дисплеи диагональю в 5+", ну а кто-то остаётся ярым поклонником и приверженцем компактных смартфонов с крошечными дисплейчиками. В наше время, купить новый смартфон с относительно небольшим дисплеем за приемлемые деньги почти нереально — самые бюджетные модели будут слишком тормозными для современного пользователя. Некоторое время назад, я купил себе бюджетный крошечный смартфон 2012 года выпуска — Samsung Galaxy Pocket, причём всего за 100 рублей. Конечно же мне захотелось довести его до ума — а доводить пришлось руками и навыками прожженного программера! Какой смартфон можно получить за 100 рублей? Читаем в статье!
Читать дальше →
Всего голосов 40: ↑39 и ↓1 +38
Комментарии 34

Подробный разбор 64b nano game: snake64

Уровень сложности Сложный
Время на прочтение 12 мин
Количество просмотров 2.4K
Туториал

Всем салют!

Очень приятно, что многим зашёл недавний разбор моего 64b intro: radar. Я рад, что у меня, наконец, дошли до этого руки. Лёд тронулся, господа присяжные заседатели.

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

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

Посмотреть что там...
Всего голосов 39: ↑39 и ↓0 +39
Комментарии 13

Подробный разбор 64b intro: radar

Уровень сложности Сложный
Время на прочтение 14 мин
Количество просмотров 9.8K
Туториал

Да здравствует мыло душистое демосцена! И вам привет, дорогой читатель ;)

С демосценой я познакомился примерно 25 лет назад (или чуть больше). Но тогда это выражалось лишь в просмотре 128–256-байтовых интр (и демок, конечно же) с изумлением а‑ля: «А что так можно было?» Думаю, у многих знакомство с этой киберкультурой начинается похожим образом :). Если вам эти слова мало о чём говорят, почитайте о демосцене скудную статью на Вики, ну и/или послушайте подкаст, а также посмотрите что люди умудряются сделать, укладываясь всего лишь, например, в 256 байт кода (справа у большинства работ есть ссылка на видео YouTube).

Полноценные интры на любимом ассемблере x86 я начал писать только 5 лет назад, в 2018 году. Именно тогда я отправил на знаменитый фестиваль Chaos Constructions (который, кстати, организаторы обещают возродить в 2024) два прода (от слова «production»): 256b intro StarLine (заняла 1-е место) и 64b intro radar (заняла 6-е место в том же compo). После этого демосцена меня засосала стала частью моей жизни, в которую время от времени я с энтузиазмом погружаюсь.

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

Заглянуть за кулисы...
Всего голосов 101: ↑100 и ↓1 +99
Комментарии 35

Создатель Ruby on Rails: «Turbo 8 отказывается от TypeScript»

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

По общему мнению, TypeScript стал большим успехом для Microsoft. Я видел множество сияющих от радости людей, напичкавших JavaScript типами, которые могут быть проверены компилятором. Но я никогда не был его поклонником. Ни через пять минут размышлений, ни через пять лет. Поэтому я с большим удовольствием могу сообщить, что мы отказываемся от TypeScript в следующем большом выпуске Turbo 8.

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

Программирование для Palm OS: что же там самое сложное?

Уровень сложности Средний
Время на прочтение 11 мин
Количество просмотров 4.1K
Туториал
Приветствую всех!

Думаю, многие из нас хоть раз слышали о КПК на базе Palm OS. А некоторым даже довелось иметь такой в использовании.

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



Итак, в сегодняшней статье поговорим о самом специфическом аспекте разработки под такие КПК. Разберёмся, что же было предметом дискуссий о целесообразности программирования для пальм, узнаем, насколько всё сложно. Традиционно будет много интересного.
Читать дальше →
Всего голосов 42: ↑42 и ↓0 +42
Комментарии 7

Вывод оптимального алгоритма с помощью формализма Бёрда-Меертенса

Уровень сложности Средний
Время на прочтение 9 мин
Количество просмотров 2.4K
Туториал

Некоторые оптимальные алгоритмы, оказывается, можно вывести из неоптимальных, пользуясь эквивалентными преобразованиями алгоритма. Бёрд и Меертенс разработали формализм, который устанавливает свойства функций высшего порядка map, fold, scan, позволяющие преобразовывать алгоритмы в эквивалентные. (См. также на Вики). Ниже представлен вольный перевод статьи Бёрда.


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


Для всех сегментов, которые можно получить из массива, необходимо посчитать сумму чисел, а затем среди всех таких сумм найти максимальную.
Читать дальше →
Всего голосов 11: ↑11 и ↓0 +11
Комментарии 0

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

Битва пет-проектов
Дата 25 сентября – 30 ноября
Место Онлайн
PG Boot Camp Russia 2023
Дата 5 октября
Время 10:00 – 17:00
Место Москва Онлайн
Joker
Дата 9 – 14 октября
Время 16:00 – 19:30
Место Санкт-Петербург Онлайн
Открытый урок «Kafka Streams»
Дата 16 октября
Время 10:00
Место Онлайн
Питч-сессия pravo (tech) impulse
Дата 19 октября
Время 15:45 – 17:30
Место Москва
Russia Risk Conference 2023 — 19-я конференция по риск-менеджменту
Дата 25 – 26 октября
Время 10:00 – 19:00
Место Москва Онлайн
Онлайн IT HR-конференция HR42
Дата 17 – 18 ноября
Время 10:00 – 14:00
Место Онлайн
HighLoad++ 2023
Дата 27 – 28 ноября
Время 9:00 – 20:00
Место Москва Онлайн

Не дадим Windows Phone умереть! Как я написал свои клиенты VK, YouTube для Nokia Lumia? Сам себе экосистема ч.2

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

Windows Phone… услышав название этой мобильной системы, поневоле начинаешь с теплотой вспоминать своего недавнего, такого необычного мобильного друга, как будто прошло всего пару месяцев с момента смены смартфона на iPhone/Android. А ведь с момента фактической смерти Windows Phone прошло уже почти 10 лет! Увы, время вспять уже не повернуть, а мобильное подразделение Nokia не спасти, однако при наличии навыков разработки мобильных приложений, большом энтузиазме и фанатизме, есть шанс вернуть жизнь своему старому другу! Недавно я снова загорелся диким энтузиазмом и смог вернуть жизнь старенькой «люмии», написав собственные клиенты нужных мне сервисов с нуля — и готов поделиться этим с вами во всех подробностях!

Сегодня вы узнаете о моей мотивации привносить жизнь старым смартфонам, о тонкостях разработки мобильных приложений, чем Windiows Phone был на голову выше Android в техническом плане и о том, почему провал Windows Phone — одна из самых больших потерь мобильного рынка. Интересно? Тогда добро пожаловать в статью!
Читать дальше →
Всего голосов 81: ↑79 и ↓2 +77
Комментарии 74

DreamBerd — идеальный язык программирования

Время на прочтение 12 мин
Количество просмотров 22K
Обзор
Перевод

DreamBerd - идеальный язык программирования. Вот его фичи!

Когда вы закончите знакомиться со всеми фичами, ознакомьтесь с примерами.

Восклицательные знаки!

Будьте смелее! Заканчивайте каждое утверждение восклицательным знаком!

print("Hello world")!

Если вы чувствуете себя особенно смелым, вы можете использовать еще больше!!!

print("Hello world")!!!

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

print("Hello world")?

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

if (;false) {

   print("Hello world")!

}

Читать далее
Всего голосов 89: ↑86 и ↓3 +83
Комментарии 45

Архитектура и программирование Sony Playstation 1

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

По сравнению с другими, ранее описанными мной архитектурами, архитектура Sony Playstation 1 (PSX) - сравнительно современная. И дело даже не в годе выпуска (1994) - скорее это общее ощущение сочетания новых возможностей и исчезновения привычных старых, которые были типичными для компьютеров и приставок предыдущей эпохи.

PSX (это сокращение пошло от первоначального названия проекта - Playstation X) имеет в качестве центрального процессора MIPS R3000, работающий на частоте 33МГц. Причём, Sony отказалось от сопроцессора для вычислений с плавающей точкой и вместо него сопроцессором в PSX является так называемый GTE (Geometry Transformation Engine), выполняющий различные операции с фиксированной точкой над векторами и матрицами.

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

Пишем самую тупую на свете сортировку

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

И это не пузырьковая, а нечто гораздо более тупое.

Как-то после обеда, стоя за чашечкой кофе, мне пришла в голову мысль. Что ведь для того чтобы убедиться что массив отсортирован, надо сделать `n-1` сравнение. Например для массива длины 4 таких сравнения будет 3:

Дальше тупее
Всего голосов 87: ↑86 и ↓1 +85
Комментарии 45

DI в JS: идентификаторы зависимостей

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

В предыдущих публикациях (раз, два) я рассматривал возможности использования внедрения зависимостей в чистом JavaScript (без TypeScript, аннотаций и транспиляции). В данной публикации я продолжаю погружаться в вопросы использования DI в JS и более пристально рассматриваю роль идентификатора зависимости в создании объектов контейнером.

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

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

Нарастающий итог в таблицах Google одной формулой

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

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

Я по шагам расскажу как это сделать всего одной формулой в одной ячейке. Кто хочет сразу готовую формулу - можно прокрутить вниз.

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

Я люблю питон, и вот почему он меня бесит

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

Вас приветствует ваш зануда!

Если вы следите за моей ленивой активностью, то заметили бы, что у меня много от чего пригорает. Вот, например:
- У меня пригорает от низкосортных статей на потоке: Питон против Безумного Макса, или как я посты на Хабре замораживал
- У меня пригорает от Django: Окей, Джанго, у меня к тебе несколько вопросов
- И от Яндекса тоже: Собеседование в Яндекс: театр абсурда :/
- И от рекрутеров: Я единственный из 1400, или самый крутой рекрутинг, что я проходил

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

Это что же получается, kesn опять открыл postman и сломал вёрстку на сайте? Поразительно, никогда такого не было, и вот опять! В принципе, тут можно писать текст любой длины (похоже, у них на бэкенде не Char(255), а Text). Они проверяют длину только на фронтенде, а бэкенд принимает строку любой длины. И это, блин, забавно) Вообще мой девиз - 'кто ищет, тот всегда найдёт', поэтому я ищу постоянно. Кстати, на Хабре скоро выйдет статья про программирование глазами Погромиста, там в том числе про уязвимости на сайтах будет - поэтому если не хотите пропустить, то подписывайтесь на меня в телеге: @blog_pogromista
Всего голосов 248: ↑238 и ↓10 +228
Комментарии 143

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