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

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

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

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

Минимизация файла ELF – попробуем в 2021?

Блог компании RUVDS.com Ненормальное программирование *Assembler **nix *Разработка под Linux *
Перевод
Tutorial

Экспериментальный проект по максимальному уменьшению ELF-файла с программой Hello, World! под целевую систему Linux x64 с помощью NASM. В предыдущем опыте начала 2000-х удалось добиться размера рабочего файла в 45 байтов, но с тех пор ядро сильно изменилось. Каков же будет минимальный жизнеспособный ELF в 2021?
Читать дальше →
Всего голосов 75: ↑74 и ↓1 +73
Просмотры 7.3K
Комментарии 9

Новости

Как я начал писать макросы для Rust на Gluon

Ненормальное программирование *Функциональное программирование *Rust *

Во многих языках есть специальный механихм для кодогенерации - макросы. Иногда из реализуют на отдельном достаточно примитивном языке, основанном на простой подстановке текста (препроцессоры PL/I и C, m4), но даже в таком варианте удается делать интересные и полезные вещи. Другой популярный вариант - макросы реализуются на том же языке, что и программа, в которой они используются. Такой подход ведет свое начало из Lisp (удобный тем, что формат программ и данных там одинаков), активно применяется в Julia, OCaml(camlp4/5), Scala, Haskell, Rust, а наибольшего развития получил в Nemerle, где макрос может может запускаться как до, так и после проверки и вывода типов, и в последнем варианте иметь доступ к типам.

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

Читать далее
Всего голосов 19: ↑13 и ↓6 +7
Просмотры 3.1K
Комментарии 13

Кодим как в старину, или IDE для обучения базовому программированию

Ненормальное программирование *JavaScript *Программирование *HTML *Софт

Когда-то, когда трава была зеленее, экраны меньше, а энтузиазм больше - многие начинали программировать с Turbo Pascal, или даже с Basic. Сейчас, в эпоху фреймворков и библиотек, уже обычный hello world не напишешь, без кучи бойлерплейта. Или напишешь...?

Читать далее
Всего голосов 32: ↑31 и ↓1 +30
Просмотры 8.9K
Комментарии 40

Безумные умения фанатов графических калькуляторов

Ненормальное программирование *Разработка игр *История IT Игры и игровые приставки
Перевод

В середине-конце 2000-х в любой школе США всегда был какой-нибудь ребёнок, записывавший на графический калькулятор игры. Возможно, вас не удивит, что некоторые такие люди не находились в полном вакууме. На самом деле, существовала процветающая сцена хакеров, подчинявших эти калькуляторы своей воле; они писали игры, математическое ПО и в целом хакали платформу просто ради самого этого процесса.

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

Как сделать Змейку на чекбоксах и не только

Блог компании SkillFactory Ненормальное программирование *CSS *JavaScript *Программирование *
Перевод

В допандемическом 2020 Брайан Браун отправился на неделю в Recurse Center и разработал Checkboxland. Эта библиотека JavaScript отображает текст и анимацию на сетке флажков. 

К забавному маленькому проекту автор сделал несколько демонстраций, написал об этом, а в итоге положил проект на полку и не прикасался к нему около года. В конце концов, отчаянно захотелось развлечься с программированием, и автор снова взялся за Checkboxland. Хотелось сделать более качественную и сложную анимацию, поэтому всё началось с эффекта пульсации — и зацепило. Да, на КДПВ вы видите кадр из видео на чекбоксах.

Пока у нас начинается курс по Frontend-разработке, делимся сразу двумя материалами о чекбоксах.

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

Как правильно верстать 2, или зачем я написал еще одну UI-библиотеку, мой первый npm-модуль?

Веб-дизайн *Ненормальное программирование *CSS *JavaScript *Интерфейсы *

Это работа является логическим продолжением моего первого подробного текста для сообщества об актуальных подходах к верстке Как верстать веб-интерфейсы быстро, качественно и интересно. Но, если в первом трактате, внимание уделялось, прежде всего, стилю кода, его качеству и эффектным современным возможностям различных препроцессоров и фреймворков, что демонстрировалось на некоторых конкретных специфических задачах, теперь хочется сфокусироваться на архитектурных или даже организационных аспектах веб-производства. Если вы не читали мой первый текст, но собираетесь при этом прочесть этот — не поленитесь перейти по ссылке и пробежать глазами самые последние разделы каждой из двух частей первого пособия: «Готовые решения» и «Песочницы». Этот текст начинает прямо с этих мест и развивает именно эти идеи: и о пагубности применения раскрученных-популярных «на все готовых» UI-«дизайн-систем»-фреймворков для создания кастомизированных веб-морд любой сложности и, о, по сути, полезности использования хотя бы минимального документирования и явных соглашений при разработке веб-GUI на фронтенде. Но я не стану тратить время, доказывая, что «ни в коем случае нельзя использовать Vuetify или AntDesign» для создания крупных UI-систем с полностью кастомным оформлением. Вам не нужно прикручивать себе огромный геморрой непроницаемый слой плохо кастомизируемого готового GUI для того чтобы написать кнопку или поле ввода! Если вам нужен датапикер — найдите и допилите что-нибудь под себя. Это понимание может только прийти или так и не придти с годами тяжелого опыта, когда вы будете постоянно тратить непростительно много своего времени на то, чтобы написать очевидно отвратительный CSS — «кряки с !important`ами поверх стилей библиотеки», выдумывать чудные костыли на javascript чтобы изменить дефолтное поведение виджетов на кастомное и хитрое-нестандартное затребованное вашими дизайнерами... И при этом ваши шаблоны, стили и js-обвязки будут превращаться во все менее читаемые запутанные нагромождения разнообразно оформленного кода, с различным подходом к наименованию и прочими бедами… Этот текст и написанный для него проект призваны наглядно показать «а как надо?».

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

Модификация ядра Linux: добавляем новые системные вызовы

Блог компании RUVDS.com Ненормальное программирование **nix *Разработка под Linux *
Перевод

В этой статье мы научимся изменять ядро Linux, добавим собственные уникальные системные вызовы и в завершении соберем ядро с новой функциональностью.
Читать дальше →
Всего голосов 57: ↑54 и ↓3 +51
Просмотры 8.8K
Комментарии 14

Виртуальный город-государство и презентация новой платформы — как пройдет новый The Standoff Moscow 2021

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

В ноябре белые хакеры и специалисты по информационной безопасности соберутся на крупнейшей в мире открытой кибербитве The Standoff Moscow. Мы обновились и готовим для вас тренировки на киберполигоне, открытые киберучения, технические доклады от молодых профессионалов и погружение в вопросы инвестиций в кибербез. На такое количество нововведений потребовалось больше времени, чем планировалось, но уже 15 и 16 ноября специалисты по ИБ попытаются взломать броню компаний из различных отраслей, включая Positive Technologies. А еще мы покажем новую онлайн-платформу Standoff365 для проведения киберучений в режиме 24/7/365.

Подробности
Всего голосов 2: ↑2 и ↓0 +2
Просмотры 861
Комментарии 0

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

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

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

Читать далее
Всего голосов 17: ↑16 и ↓1 +15
Просмотры 7.7K
Комментарии 4

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

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

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

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

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

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

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

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

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

Читать дальше →
Всего голосов 101: ↑95 и ↓6 +89
Просмотры 17K
Комментарии 100

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

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

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

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

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

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

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

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

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

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

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

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

Слишком просто. Давайте обойдемся без кучи. Никаких malloc и new. Можно ли тогда сделать массив?
Да, можно ли?
Всего голосов 26: ↑10 и ↓16 -6
Просмотры 6.2K
Комментарии 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));
}

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

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

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

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

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


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

Читать дальше →
Всего голосов 177: ↑159 и ↓18 +141
Просмотры 44K
Комментарии 217

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

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

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

Читать дальше →
Всего голосов 4: ↑4 и ↓0 +4
Просмотры 2K
Комментарии 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.6K
Комментарии 11

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

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

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

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

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

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

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