• Минимальный WebGL в 75 строках кода

    • Translation
    Современный OpenGL и, в более широком смысле, WebGL, сильно отличается от старого OpenGL, который я изучал в прошлом. Я понимаю, как работает растеризация, поэтому вполне разбираюсь в концепциях. Однако в каждом прочитанном мной туториале предлагались абстракции и вспомогательные функции, усложнявшие мне понимание того, какие части относятся к самим API OpenGL.

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

    Во-первых, нужно поблагодарить создателя использованного мной туториала. Взяв его за основу, я избавлялся от всех абстракций, пока не получил «minimal viable program». Надеюсь, она поможет вам начать освоение современного OpenGL. Вот что мы будем делать:


    Равносторонний треугольник, зелёный сверху, чёрный в нижнем левом углу и красный в нижнем правом, с интерполированными между точками цветами. Чуть более яркая версия чёрного треугольника [перевод на Хабре].
    Читать дальше →
    • +19
    • 4.1k
    • 5
  • Как слепой разработчик в одиночку создала синтезатор речи


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

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

      Называется от RhVoice и упоминался в нескольких публикациях на Хабре. Но знаете ли вы, что многие считают его лучшим бесплатным синтезатором русской (и не только) речи, а написан он в одиночку полностью слепым разработчиком — Ольгой Яковлевой?

      Сегодня восстанавливаем историческую справедливость и немного узнаем про сам синтезатор вообще, и Ольгу в частности.
      Читать дальше →
    • Разжимаем древний формат сжатия анимаций

      image

      В один день я просматривал различные видео на YouTube, связанные с персонажами программы Vocaloid (не совсем точное описание, но дальше буду называть просто вокалоидами). Одним из таких видео было так называемое PV из игры Hatsune Miku: Project DIVA 2nd. А именно песня relations из The Idolmaster, которую исполняли вокалоиды Megurine Luka и Kagamine Rin. Оба персонажа от Crypton Future Media. Порыскав по сети я понял, что никто так и не смог сконвертировать анимации из этой игры? Но почему? Об этом под катом.
      Читать дальше →
      • +19
      • 4.1k
      • 6
    • Море, пираты — 3D онлайн игра в браузере

        Приветствую пользователей Хабра и случайных читателей. Это история разработки браузерной многопользовательской онлайн игры с low-poly 3D графикой и простейшей 2D физикой.

        Позади немало браузерных 2D мини-игр, но подобный проект для меня в новинку. В gamedev решать задачи, с которыми ещё не сталкивался, может быть довольно увлекательно и интересно. Главное — не застрять со шлифовкой деталей и запустить рабочую игру пока есть желание и мотивация, поэтому не будем терять время и приступим к разработке!

        Читать дальше →
      • Гениальный алгоритм создания лабиринтов в игре Entombed, который до сих пор не могут разгадать



          В 2017 двое ученых, канадец John Aycock и британка Tara Copplestone, опубликовали анализ классической игры Entombed для игровой приставки Atari 2600. Механика этой игры, выпущенной в 1982, крайне проста: археолог, управляемый игроком, должен пробраться по прокручивающимся снизу вверх катакомбам, уворачиваясь от зомби.

          У Atari 2600 было всего 128 байт ОЗУ; тем не менее, кажущийся бесконечным лабиринт при каждом запуске был новым, т.е. генерировался в памяти. Как же программистам это удалось? Вот комментарий Стивена Сидли — программиста, 38 лет назад создавшего эту игру:
          Основную часть генератора лабиринтов написал какой-то уволившийся торчок. Я связался с ним, чтобы выяснить, как его алгоритм работал. Он ответил, что придумал этот алгоритм, когда был вусмерть накурен и вдобавок пьян, что написал его сразу на ассемблере прежде чем вырубился, а потом даже близко не мог вспомнить, в чем его алгоритм состоял.
          Читать дальше →
        • Предвзятый и субъективный взгляд на резюме разработчика

            Привет! Недавно мои коллеги из hh.ru провели вебинар, где разбирали резюме разработчика. Я решил поделиться своей точкой зрения на этот счет.


            image


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

            Читать дальше →
          • Как я написал интро 4K на Rust — и оно победило

            • Translation
            Недавно я написал своё первое интро 4K на Rust и представил его на Nova 2020, где оно заняло первое место в конкурсе New School Intro Competition. Написать интро 4K довольно сложно. Это требует знания многих различных областей. Здесь я сосредоточусь на методах, как максимально сократить код Rust.


            Можете просмотреть демо-версию на Youtube, скачать исполняемый файл на Pouet или получить исходный код с Github.
            Читать дальше →
          • Radarr, Jackett и бот в телеге. Качаем торренты по-новому

            • Tutorial
            image

            В итоге, конечно, стриминг таки добьёт торренты. И если в 720/1080p мире это, по сути, уже свершилось, то Blue-ray/4k/8k контент пока ещё держится за счёт торрентов (у нас и в Европе) и юзнетов (штаты).

            Сегодня стриминг выигрывает, в основном, за счёт удобства. Открыл апп, зашёл в раздел «новинки» и выбирай на любой вкус. Я прокачал свой процесс с торрентами, и теперь он смотрится, как минимум, не хуже.
            Читать дальше →
          • RX-Modulus: полностью модульная компьютерная мышь

            • Translation

            Наконец-то – мышь, части которой можно свободно менять, ремонтировать и обновлять так, как хочется пользователю




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

            Три года я не спеша занимался разработкой этого проекта. Я уже много раз пересматривал концепцию и начинал с нуля, но теперь, как мне кажется, нащупал правильный путь. Эту мышь, наконец, можно свободно менять, обновлять и ремонтировать. Теперь я готов показать свой проект сообществу Hackaday с тем, чтобы его члены помогли мне в дальнейшей разработке.
            Читать дальше →
          • Пишем игру «Жизнь» для NES на Rust

            • Translation
            image

            Этот пост — о программе на Rust…

            $ cargo install conway-nes

            …выводящей двоичный файл NES…

            $ conway-nes > life.nes

            …в котором выполняется конвеевская игра «Жизнь»!

            $ fceux life.nes    # fceux is a NES emulator

            Запустив игру на эмуляторе, нажмите любую кнопку контроллера, чтобы начать заново с рандомизированного состояния.
            Читать дальше →
            • +28
            • 4.3k
            • 4
          • Python.org рекомендует: Программирование для НЕпрограммистов

            • Translation
            Предлагаем вашему вниманию подборку материалов от python.org о том, с чего начать первые шаги в программировании.




            Если Вы никогда не занимались программированием раньше, эти материалы для вас. Данные туториалы не предполагают, что у вас есть какой-то опыт. (Если у вас уже есть опыт программирования, посетите Beginners Guide).
            Читать дальше →
            • +19
            • 23.5k
            • 3
          • Библиотека ttf2mesh — преобразование TrueType шрифтов в сетку

              Многим известна проблема трёхмерной графики — отсутствие легковесных кроссплатформенных решений в вопросе вывода текста.


              Большинство реализаций позволяет использовать выбранный шрифт в виде текстуры. Публикуемая библиотека ttf2mesh реализует другой способ — она преобразует векторные символы TrueType шрифта в сеточные объекты. Это позволяет выводить текст в виде набора треугольников.


              image


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

              Читать дальше →
            • Публикуем дизайн-библиотеки компонентов VKUI в Figma

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


                На Github уже опубликован исходный код компонентов на React — следуя примеру наших разработчиков, теперь мы делимся библиотеками компонентов в Figma.


                Читать дальше →
                • +18
                • 4.9k
                • 5
              • MNT Reform — Полностью открытый ноутбук для параноиков



                  MNT Reform — самый открытый ноутбук для параноиков из когда-либо созданных. Вся схемотехника плат, загрузчик и драйвера открыты, в нем нет веб-камеры, а в качестве батареи заменяемые банки 18650. Настоящее торжество красноглазия.

                  Используется ARM процессор i.MX8 в виде готового SoM (system on module) с полностью пассивным охлаждением и всего 4GB оперативной памяти.
                  Читать дальше →
                • Простой шейдер для точечных источников света в тумане

                  • Translation
                  Мне нужен был простой и быстрый шейдер, создающий туман, освещённый точечными источниками света. Для его реализации я написал эффект экранного пространства, результаты работы которого показаны ниже. Конвейер почти столь же прост, что и для обычных точечных источников. Он не требует структур данных объёмов, ray marching, и может быть без проблем подключен к уже существующему шейдеру освещения.

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


                  Небольшая сцена с космическим кораблём, отрендеренная в тумане при помощи моей техники
                  Читать дальше →
                  • +11
                  • 2.9k
                  • 3
                • Как воспитать здорового довольного червя: разбираем инструкцию 1910 года


                    В общем, я давно хотел рассказать вам про шелкопряда

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

                    В стране были уже и единичные деревья, и плантации, но с 1720 года шёлка понадобилось в разы больше. Пётр I основал большие плантации шелковичных деревьев. Но несмотря на все старания, червь у нас часто болел, чах и вообще капризничал. Тем не менее, в Астрахани на местном сырье к концу восемнадцатого века работало 20 шелковых и 70 полушелковых фабрик.

                    В СССР в доперестроечные времена производилось до 900 тонн коконов в год. Потом постепенно шёлк вытеснили синтетические материалы. Но речь не об этом.

                    Сейчас я буду учить вас выращивать тутовое дерево и воспитывать червя. На самом деле, предлагаю почитать инструкцию 1885 — 1910 года по процессу. Обещаю, она прекрасна ровно как и захватывающа. По дороге нам встретятся Луи Пастер не с тем подвигом и другие интересные люди.

                    Ну и, конечно, я отсканировал свой экземпляр и, обсудив с юристами, могу сказать, что книга доступна для всеобщего пользования.
                    Читать дальше →
                  • Расследование: что выше, чем приоритеты потоков в Windows?

                    • Translation
                    Это расследование, как и многие другие, началось с того, что я занимался собственными делами, не пытаясь искать себе проблем. На этот раз всё, что я сделал — открыл крышку ноутбука и попытался выполнить вход в систему.

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

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

                    К счастью, я недавно исправил трассировку кольцевого буфера UIforETW, сделав его надёжным, поэтому я запустил его и начал ждать следующего случая задержки. Долго ожидать мне не пришлось.

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

                    Идеальная трассировка, которую я в конце концов записал, при загрузке в Microsoft Windows Performance Analyzer (WPA) выглядит так:


                    Стандартные события, окна в фокусе и использование ЦП

                    Эта таблица и два графика содержат кучу информации. Верхняя таблица (Generic Events) показывает записанные UIforETW нажатия клавиш. Я пытался нажимать клавишу (код виртуальной клавиши 162) раз в секунду, пока не появится поле ввода пароля. Так как эти 17 нажатий клавиши выбраны, в графике ниже они показаны вертикальными синими линиями для упрощённой визуализации времени выполнения критически важных событий. По оси x отложено время в секундах.
                    Читать дальше →
                    • +37
                    • 9.7k
                    • 9
                  • Какие алгоритмы разработчики Яндекса реализовывают каждый день

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




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


                      В статье четыре примера. Два на C++, один на TypeScript и один на Python. Способность быстро писать относительно простые алгоритмы без багов — общая необходимость, она не зависит от специализации разработчика.

                      Читать дальше →
                    • SHISHUA: самый быстрый в мире генератор псевдослучайных чисел

                      • Translation

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

                      К моему удивлению, сложность возрастала не линейно. Побайтовое тестирование по критерию хи-квадрат оказалось очень трудным! Позднее столь же трудно было пройти тесты diehard. Я опубликовал текущие результаты, чтобы понять, какие ещё трудности меня ожидают. Однако тест PractRand в тот раз пройти не удалось.

                      Затем было очень трудно прохождение теста BigCrush.

                      Затем было очень трудно передавать 32 тебибайта данных при прохождении PractRand. Скорость стала проблемой. Мало было создать конструкцию, генерирующей десять мегабайтов в секунду, потому что прохождение PractRand заняло бы месяц. Но должен признаться, что пройти этот тест со скоростью гигабайт в секунду было очень трудно.
                      Читать дальше →