• Создаём собственный физический 2D-движок: части 2-4

    • Перевод
    image


    Оглавление


    Часть 2: ядро движка

    • Интегрирование
    • Метки времени
    • Модульная архитектура
      • Тела
      • Формы
      • Силы
      • Материалы
    • Широкая фаза
      • Отсечение дубликатов контактных пар
      • Система слоёв
    • Проверка пересечения полупространств

    Часть 3: трение, сцена и таблица переходов

    • Трение
    • Сцена
    • Таблица переходов коллизий

    Часть 4: ориентированные твёрдые тела

    • Математика вращения
    • Ориентированные формы
    • Распознавание коллизий
    • Разрешение коллизий

    Читать дальше →
    • +50
    • 14,1k
    • 7
  • Что каждый программист на C должен знать об Undefined Behavior. Часть 1/3

    • Перевод
    Часть 1
    Часть 2
    Часть 3

    Люди иногда спрашивают, почему код, скомпиливанный в LLVM иногда генерирует сигналы SIGTRAP, когда оптимизация была включена. Покопавшись, они обнаруживают, что Clang сгенерировал инструкцию «ud2» (подразумевается код X86) — то же, что генерируется __builtin_trap(). В этой статье рассматривается несколько вопросов, касающихся неопределённого поведения кода на C и того, как LLVM его обрабатывает.

    image

    В этой статье (первой из трёх) мы попытаемся объяснить некоторые из этих вопросов, чтобы вы могли лучше понять связанные с ними компромиссы и сложности, и возможно, изучить немного больше тёмные стороны С. Мы выясним, что C не является «высокоуровневым ассемблером», как многие опытные программисты на C (особенно те, кто сфокусирован на низком уровне) предпочитают думать, и что C++ и Objective-C напрямую унаследовали множество таких проблем.
    Читать дальше →
  • О разработке одного desktop-приложения на Python

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


      Что такое OutWiker


      Когда-то я писал об этой программе на Хабре, но это было так давно, что прежде чем говорить об особенностях внутреннего устройства и процесса разработки, нужно сказать, что представляет собой программа с точки зрения пользователя. Все ссылки, связанные с проектом даны в конце статьи. Итак, OutWiker — это программа для хранения заметок в виде дерева, в англоязычном интернете такой софт обычно называют outliner (поэтому у программы такое название). Среди более известных «коллег» OutWiker с подобным функционалом можно назвать Zim, WikidPad, CherryTree, и множество других (ну и, разумеется, org mode для Emacs). Логичный вопрос с точки зрения пользователя — чем OutWiker отличается от других представителей древовидных записных книжек. На данный момент, по прошествии такого количества времени с момента начала разработки, я уже не готов развернуто сравнить весь этот софт. В стародавние времена я перепробовал десятки outliner-ов, штук пять использовал достаточно долгое время, но везде чего-то не хватало, хотелось одну возможность взять из WikidPad, другую — из викидвижка, который может работать оффлайново и т.д. Поэтому в качестве ответа на такой вопрос просто перечислю основные особенности, которыми обладает OutWiker.



      Читать дальше →
    • Реализация «Тетриса» в игре «Жизнь»

      • Перевод
      То, что начиналось как приключение, закончилось одиссеей.

      image

      Задача по созданию тетрис-процессора размером 2 940 928 x 10 295 296


      Этот проект стал кульминацией труда множества пользователей в течение последних полутора лет. Хотя состав команды со временем менялся, в написании этой статьи принимали участие следующие авторы:

      • PhiNotPi
      • El'endia Starman
      • K Zhang
      • Muddyfish
      • Kritixi Lithos
      • Mego
      • Quartata

      Также мы хотим поблагодарить 7H3_H4CK3R, Conor O'Brien и многих других пользователей, вложивших свои труд в решение этой задачи.

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

      Стоит также заглянуть в GitHub нашей организации, в котором мы выложили весь код, написанный для решения задачи. Вопросы можно задавать в нашем чате разработки.
      Читать дальше →
    • Качественное уменьшение изображений за константное время

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


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



        Уменьшение изображения 4928×3280 до 256×170 ближайшим соседом.


        Рекомендую смотреть примеры из статьи в браузере в масштабе 100% и без ретины. То есть по максимуму исключить ресайз при просмотре.

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



        Точки, которые попадут в конечное изображение размером 20×13.
        Читать дальше →
      • Тернистый путь Hello World

        Вдохновение на написание данной статьи было получено после прочтения похожей публикации для архитектуры x86 [1].


        Данный материал поможет тем, кто хочет понять, как устроены программы изнутри, что происходит до входа в main и для чего всё это делается. Также я покажу как можно использовать некоторые особенности библиотеки glibc. И в конце, как и в оригинальной статье [1] будет визуально представлен пройденный путь. В большинстве своём статья представляет собой разбор библиотеки glibc.


        Итак, начнём наш поход. Будем использовать Linux x86-64, а в качестве инструмента отладки — lldb. Также иногда будем дизассемблировать программу при помощи objdump.


        Исходным текстом будет обычный Hello, world (hello.cpp):


        #include <iostream>
        int main()
        {
                std::cout << "Hello, world!" << std::endl;
        }
        Читать дальше →
        • +74
        • 19,6k
        • 4
      • Python Tips, Tricks, and Hacks (часть 2)

        • Перевод
        Содержание

        Списки. Свёртка списка (reduce). Прохождение по списку (range, xrange и enumerate). Проверка всех элементов списка на выполнение условия (all и any). Группировка элементов нескольких списков (zip). Еще несколько операторов для работы со списками. Продвинутые логические операции с типом set.
        Словари. Создание словаря с помощью именованных аргументов. Преобразование словаря в список и обратно. «Dictionary Comprehensions».
        Читать дальше →
      • Python: советы, уловки, хаки (часть 1)

        • Перевод
        Предлагаю читателям «Хабрахабра» перевод статьи «Python Tips, Tricks, and Hacks». Статья будет полезна на начальном и среднем этапах изучения Python.

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

        Содержание

        1. Маленькие уловки. Четыре типа кавычек. Правдивость различных объектов. Проверка на вхождение подстроки. Красивый вывод списка. Целочисленное деление и деление с плавающей точкой. Лямбда-функции.
        2. Списки. Генераторы списков и выражения-генераторы.
        Читать дальше →
      • t1ha = Fast Positive Hash

        Чуть менее, чем самая быстрая, переносимая, 64-битная хеш-функция, с достойным качеством.
        Да, вжух и в дамки, примерно так. Читаем дальше?

        Читать дальше →
      • 11 бесплатных шрифтов с кириллицей

          image

          1. Arimo

          image

          Дизайнер: Стив Мэттэсон – увлеченный дизайнер из штата Колорадо. Более 25 лет Мэттэсон разрабатывает шрифты, самыми крупными проектами стали дизайны для Android, Citrix, Microsoft, Nextel и Xbox.

          image

          Типы: Regular, Regular Italic, Bold, Bold Italic
          Лицензия: Apache License, Version 2.0
          Скачать шрифт


          Arimo – без засечек, разработанный специально для работы с Arial. Шрифт слегка сжат по ширине. При небольшом кегле буквы тонкие и классические. Изящные черты достигаются при увеличении размера символов. Шрифт адаптирован для чтения на экране и отлично подойдет для документов на разных платформах.
          Читать дальше →
          • +20
          • 17,4k
          • 5