Как стать автором
Обновить
202.37
Рейтинг

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

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

Сначала показывать
  • Новые
  • Лучшие
Порог рейтинга
  • Все
  • ≥0
  • ≥10
  • ≥25
  • ≥50
  • ≥100

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

Ненормальное программирование *C++ *
Из песочницы

Недавно мне задали задачку, в обсуждения всё свелось к следующему: - есть объект, в нём есть методы. Каждый метод/ы требует загрузки какой-то логики в рантайме. Мы хотим точно знать - какие методы мы вызвали, после в рантайме затребовать загрузки только нужной функциональности.

Читать далее
Всего голосов 14: ↑13 и ↓1 +12
Просмотры 7.1K
Комментарии 4

Термо принтер и JavaScript

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

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

Читать далее
Всего голосов 54: ↑53 и ↓1 +52
Просмотры 14K
Комментарии 68

Разгадываем ребус вторичных часов «Воронеж»

Блог компании RUVDS.com Ненормальное программирование *Программирование микроконтроллеров *Производство и разработка электроники *DIY или Сделай сам
Tutorial

В предыдущей статье я затеял создание контроллера вторичных часов «Воронеж», и даже добился некоторой работоспособности. Однако так и не разгадал окончательно ребус формы и длительности передаваемого сигнала. На ту публикацию откликнулось большое количество людей, и предложило свою помощь. Кто-то помогал советом, кто-то снял живые осциллограммы с различных первичных часов, кто просто помог добрым словом и оказал поддержку. В результате понял, что нельзя бросить это устройство в стадии недоделки, потому что за ним следит такое количество людей. Поэтому было принято волевое решение довести всё до конца, при этом с максимальным качеством, доступным в домашних условиях. Главный девиз этой разработки был:
Делай хорошо — плохо само получится.
В результате на вторую часть я потратил в полтора-два раза больше времени, чем на первую: причёсывал код, занимался механикой, чертил детали корпуса, печатал их на принтере, точил на токарном станке, а главное, страдал от перфекционизма. Как обычно бывает, механическая часть съела чуть ли не 40% всего времени. В общем, поехали, будет интересно: от идеи до законченного устройства.
Читать дальше →
Всего голосов 107: ↑104 и ↓3 +101
Просмотры 11K
Комментарии 20

Трясём стариной — или как вспомнить Ассемблер, если ты его учил 20 лет назад

Блог компании RUVDS.com Ненормальное программирование *Assembler *Системное программирование *Программирование микроконтроллеров *
Tutorial
Это — тёплая, ламповая статья об Ассемблере и разработке ПО. Здесь мы не будем пытаться писать убийцу Майкрософта или Андроида. Мы будем писать убийцу 2048. Здесь не будет докера и терраформа с кубером. Зато здесь вы сможете найти большое количество материалов по Ассемблеру, которые помогут вам вновь погрузиться в мир трёхбуквенных инструкций. Доставайте пивко, и поехали. (Саундтреком к этой статье можно считать IBM 1401 a system manual)

Читать дальше →
Всего голосов 97: ↑91 и ↓6 +85
Просмотры 15K
Комментарии 100

Как ломать банкоматы: ARP spoofing, CVE, обход киоска

Блог компании Positive Technologies Информационная безопасность *Ненормальное программирование *Спортивное программирование *Программирование *

На прошедшем 20 и 21 мая 2021 г. Positive Hack Days в зоне Payment Village был конкурс, участники которого могли посоревноваться в хакерском мастерстве, в частности во взломе банкоматов. Организаторы подготовили три виртуальных машины банкоматов с разным уровнем сложности заданий. На протяжении двух дней участники пытались взломать банкоматы, но всего несколько человек смогли приблизиться к заложенным нами сценариям.

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

Читать далее
Всего голосов 4: ↑3 и ↓1 +2
Просмотры 4.7K
Комментарии 3

Сможет ли Codex от OpenAI заменить программистов?

Ненормальное программирование *Машинное обучение *
Recovery mode
Перевод

В августе 2021 г. компания Илона Маска по разработке искусственного интеллекта OpenAI выпустила Codex — новую систему на GPT-3, которая автоматически преобразует в код простые английские фразы. «Заменит ли она программистов?» — отвечает ранний бета-тестер.

Читать далее
Всего голосов 16: ↑10 и ↓6 +4
Просмотры 9.2K
Комментарии 11

Разминка мозгов: свой массив на c++ без malloc

Ненормальное программирование *C++ *
Из песочницы
Пришла мне в голову интересная задачка: реализовать свой массив на c++.

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

Слишком просто. Давайте обойдемся без кучи. Никаких malloc и new. Можно ли тогда сделать массив?
Да, можно ли?
Всего голосов 26: ↑10 и ↓16 -6
Просмотры 6.1K
Комментарии 27

Fluent setter. Нарушаем конвенцию

Блог компании Miro Ненормальное программирование *Java *
Tutorial
Что будет, если возвращать в setter-методе не void, а this, т.е. использовать прием Fluent Interface?

public class SimplePojo {
    private String value;

    public String getValue() {
        return value;
    }

    public SimplePojo setValue(String value) {
        this.value = value;
        return this;
    }

    // equals, hashCode, toString
}

Теперь перепишем типовой кусок кода и получим такое:

private static AssignmentGroupedActivitiesResource create() {
    return new AssignmentGroupedActivitiesResource()
            .setGrouping(new UserActivitiesGroupingResource()
                    .setAlignmentScore(1)
                    .setFocusScore(0)
                    .setAdvancedGroups(Arrays.asList(
                            new ProductivityGroupResource()
                                    .setSectionName("Development")
                                    .setColor("#2196f3")
                                    .setSpentTime(5L),
                            new ProductivityGroupResource()
                                    .setSectionName("Chat")
                                    .setColor("#E502FA")
                                    .setSpentTime(1L)
                    ))
                    .setPeriodLong(10L)
                    .setTotalTrackedTime(7L)
                    .setIntensityScore(2));
}

Для сравнения – как тот же код выглядит без использования приёма:

Читать дальше →
Всего голосов 4: ↑3 и ↓1 +2
Просмотры 2.3K
Комментарии 11

Как написать FizzBuzz на собеседовании

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

Здравствуй, Хабр.


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

Читать дальше →
Всего голосов 176: ↑158 и ↓18 +140
Просмотры 43K
Комментарии 217

Реализуем рефлексию при помощи source generators

Высокая производительность *Ненормальное программирование *.NET *C# *

В одной из своих статей я уже описывал как можно реализовать рефлексию при помощи source generator-ов. Тогда цель была продемонстрировать что такое эти ваши генераторы, а сама рефлексия была лишь примером. Сейчас же, я предлагаю сконцентрироваться на рефлексии, и узнать что из этого получиться.

Читать дальше →
Всего голосов 4: ↑4 и ↓0 +4
Просмотры 1.9K
Комментарии 13

Kotlin Null-Safety vs ClassLoader

Ненормальное программирование *Java *Компиляторы *Отладка *Kotlin *

Недавно я проходил собеседование и одним из вопросов, стал такой загадочный экземпляр:
"А какое главное преимущество системы типов Kotlin перед Java"?

Честно говоря, выделить какое преимущество считалось главным, оказалось неразрешимой для меня задачей: Nothing, отсутсвие Wildcard и First-Class Functions вместо Java-костыля с Functional Interface (имеется ввиду 8я версия Java) не заняли первых мест в личном топе интервьюера, который мне предложили угадать.

Оказалось что главное в Kotlin - возможность обьявить Nullable Type и Null Safety подход (Замечу, что по моему опыту собственные или библиотечные Optional или Maybe решают эту проблему, и пишутся за 10 минут на Java 7. А еще есть аннотации Nullable, позволяющие проверять поля в сompile-time. Короче, есть много способов заставить делать Null проверки в plain Java. Ну да ладно).

Но речь пойдет не о странных вопросах, связанных со вкусовыми предпочтениями интервьюеров относительно синтаксического сахара.
Дело в том, что Null Safety в Kotlin можно сломать, притом не выходя из под его безопасного купола в суровый дикий мир Java и Null-Referrences.

Как?

Long story short: ClassLoader ведет себя интересным образом при попытке загрузить статические поля классов рекурсивно ссылающиеся на классы друг-друга.

Под катом примеры кода и подробное объяснение того, как он обманывает проверки на Nullable. Я искренне надеюсь что специфические знания Java/Kotlin для статьи не нужны - я объясню все детали на ходу, и уложу расследование в 10 минут.

Начнем.
Всего голосов 12: ↑11 и ↓1 +10
Просмотры 2.5K
Комментарии 11

Любопытные извращения из мира IT, или зачем мы JS в C++-код вкомпилили

Ненормальное программирование *JavaScript *Программирование *C++ *Браузеры

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

Мы занимались разработкой... скажем так, системы отображения интерактивного контента для рынка одной азиатской страны. Пользователь имел "умное устройство", например, ТВ-приставку или смарт-телевизор, а "интерактивный контент" представлял собой по сути дела html/js/css-приложение, которое прилетало на устройство с трансляции или из интернета и отображалось в прозрачном окне поверх видео. В качестве веб-движка использовался модифицированный Blink из гугловского Chrome.

И вот, в один прекрасный день после какого-то из обновлений, один наш партнер (читай "поставщик контента") обратился к нам с проблемой: что-то не работает.

Читать далее
Всего голосов 39: ↑39 и ↓0 +39
Просмотры 11K
Комментарии 21

Декларативная схема данных: создание единой структуры из фрагментов

Ненормальное программирование *Разработка веб-сайтов *JavaScript *Администрирование баз данных *

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


Реализуемая в приложении задача высосана из вакуума и практической пользы не имеет. Само приложение состоит из трёх npm-пакетов: основного и двух зависимых. Каждый пакет декларирует свою собственную структуру данных в JSON-формате. Основное приложение создаёт в двух различных базах данных две различные структуры, комбинируя свою собственную декларацию и декларацию из соответствующего пакета (own + pack1 & own + pack2). Совмещение различных фрагментов в общую структуру является типовой задачей модульных приложений с единой БД. Эту задачу я и рассматриваю ниже.

Читать дальше →
Рейтинг 0
Просмотры 756
Комментарии 0

Я нашел 18K+ игр в NVIDIA GeForce NOW

Информационная безопасность *Ненормальное программирование *Копирайт Игры и игровые приставки

Я, как и многие пользователи NVIDIA GeForce NOW, жду пока там добавят те игры, в которые действительно хотелось бы поиграть. Но бывало и наоборот, игры которые уже были добавлены, позже внезапно удаляли из GFN сервиса. В моем случае я хотел там пройти игры Mafia, и потом их все убрали.

Спустя время, их так и не вернули. И я решил попытаться разблокировать запретные игры NVIDIA GeForce NOW сервиса. Но нашел там то, что никак не ожидал увидеть.

Читать далее
Всего голосов 202: ↑198 и ↓4 +194
Просмотры 68K
Комментарии 72

Hacker Gifts: мой опыт создания пет-проекта, который приносит доход

Ненормальное программирование *Программирование *Реверс-инжиниринг *Монетизация веб-сервисов *Развитие стартапа

Лондон, 21:00, уже темно и идет дождь. Влад с фонариком ищет что-то, но что? Час назад ему позвонила незнакомая девушка с американским акцентом и продиктовала координаты. Прохожие смотрят на него с подозрением, а в его голове крутится только одна мысль − “Как я в это влип?”

А влип он в это из-за меня.

Узнать, что было дальше
Всего голосов 30: ↑29 и ↓1 +28
Просмотры 13K
Комментарии 13

SQL HowTo: три WHERE в одном запросе

Блог компании Тензор Ненормальное программирование *PostgreSQL *SQL *Администрирование баз данных *

При реализации некоторых прикладных задач в рамках экосистемы СБИС случается сталкиваться с неочевидными возможностями PostgreSQL, которые позволяют вместо сложной логики создать решение "в один ход".

Сегодня на примере вполне реальной задачи рассмотрим такие возможности оператора INSERT ... ON CONFLICT.

Читать далее
Всего голосов 8: ↑8 и ↓0 +8
Просмотры 5.9K
Комментарии 18

«Оптимизируем» функции на уровне AST

Блог компании ДомКлик Ненормальное программирование *Python *
Tutorial

Python предоставляет программисту огромное пространство свободы. Увы, обычно это довольно дорогая в плане производительности свобода, зато при правильном применении иногда она позволяет творить сущую магию. Но сегодня мы поговорим не о таких вот «богоугодных» применениях свободы, а о том, что никогда не стоит использовать в прикладном программировании — о модификациях кода на уровне AST.

Запутаться
Всего голосов 54: ↑54 и ↓0 +54
Просмотры 5.1K
Комментарии 7

MKINITCPIO V31 и заглушки UEFI

Блог компании RUVDS.com Ненормальное программирование *Системное администрирование *UEFI *
Перевод

Изображение взято из статьи «Linux Kernel EFI Boot Stub или «Сам себе загрузчик»»

Несколько месяцев назад я написал для скрипта mkinitcpio код, который позволяет ему создавать файлы UEFI с использованием заглушки systemd.

Само внесенное мной изменение можно найти на GitHub.

Далее я коротко продемонстрирую, чем эта возможность хороша, как она упрощает запуск системы, и как с ее помощью можно повысить безопасность, используя, например, Secure Boot.
Читать дальше →
Всего голосов 30: ↑28 и ↓2 +26
Просмотры 2.2K
Комментарии 2

Всё не то и всё не так — когда твой компьютер ПЛК

Ненормальное программирование *Программирование *Промышленное программирование *SCADA *Электроника для начинающих
Tutorial

Статья указывает на особенности разработки для промышленных контроллеров. Написана для объеденения программистов данного направления.

Если мем понял - добро пожаловать под кат, эта статья для тебя.

Если хочешь понять мем - смело жми ПУСК.

ПУСК
Всего голосов 17: ↑13 и ↓4 +9
Просмотры 6.1K
Комментарии 48

Более удобная разработка 64-битного графического UEFI приложения

Блог компании RUVDS.com Ненормальное программирование *Демосцена UEFI *

В предыдущей статье «Разработка 64-битного графического UEFI-приложения в Visual Studio 2019» VS задействовался лишь в двух аспектах: как редактор для кода — «продвинутый Блокнот» — и как отладчик для скомпилированного приложения. Всё остальное — управление зависимостями, настройки компиляции и т.д. — было отдано на откуп фреймворку edk2. Хотелось бы использовать мощь VS как IDE более полно: как минимум заиметь в редакторе кода автодополнение.

Бонусом получим более быструю компиляцию проекта: edk2 ищет изменившиеся файлы во всём своём полугигабайтном дереве, что, очевидно, излишне.
Читать дальше →
Всего голосов 53: ↑53 и ↓0 +53
Просмотры 5.4K
Комментарии 9

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