• Программист 2020: Терминатор отдыхает

      Программист сегодня не то что прежде — одного знания языка (или языков) программирования мало, чтобы быть действительно конкурентным на рынке труда. Ты можешь сколько угодно прописывать в коде на С++ указатель на указатель на указатель, но какой в этом толк, если твой работодатель плачет (менее ванильные ребята орут, лишают премии, угрожают и стоят на стороне клиента — в смысле живого клиента и пользователя вашей программы, а не того, что обменивается информацией с сервером)? Какое-то время назад что гаджеты, что концепции управления, что тенденции подбора персонала тяготели к одному и тому же: модульности, дискретности, а то и даже примитивизации и узкой специализации сотрудников, софта, инструментов. Но эволюция повернула не туда и теперь мир требует умные устройства, которые умеют всё, многофункциональные программы и приложения (привет, Яндекс Go) и, конечно, универсальных специалистов. Концепция «человека-оркестра» вернулась в тренд, не успев уйти из него. 


      Итак, что вам нужно для полного программистского счастья соответствия набора в конце 2020?
      Читать дальше →
    • Создание панорамных видео в Unity

      • Translation

      Зачем нужны панорамные видео?


      Большинство статей моего блога рассчитано на разработчиков игр. Если вы один из них, то можете задаться вопросом, чем вас может заинтересовать создание панорамных видео (360° videos). Виртуальная реальность — очень успешная отрасль, на различных платформах каждый год выпускается всё больше игр. Многие игроки узнают о VR-играх через трейлеры, которые, к сожалению, записаны в 2D.


      Если вы хотите сделать ещё один шаг вперёд, то можете создать дополнительный трейлер в панорамном видео, чтобы продемонстрировать весь потенциал вашей игры. Хотя для игры в VR обычно требуется дорогая гарнитура, панорамные видео нативно поддерживаются YouTube без необходимости дополнительного оборудования. А если у вас есть телефон, то вы можете очень просто превратить его в VR-гарнитуру с помощью Google Cardboard.
      Читать дальше →
    • Создание камней для игр с помощью фотограмметрии

      • Translation
      Себастьян ван Элвердинге рассказывает о своём подходе к созданию потрясающих трёхмерных камней и скал с помощью множества фотографий. Более подробно о нём можно узнать в туториале на gumroad.com/sebvhe.


      Введение


      Привет, меня зовут Себастьян, я живу в Брюсселе, на родине лучшего картофеля фри, пива и шоколада! Сейчас я работаю художником по окружениям в Starbreeze Studios (Стокгольм). раньше я работал в Playground Games над игрой Forza Horizon 3, которая стала для меня отличной возможностью применения фотограмметрии в игре AAA-класса.



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

      Хотя с момента написания мой рабочий процесс немного поменялся, туториал всё равно применим к тому, что собираюсь рассказать. Если вам будет что-то непонятно в этом интервью, то, скорее всего, вы найдёте подробное объяснение в туториале.
      Читать дальше →
      • +41
      • 19.1k
      • 7
    • (Надеюсь) всё, что нужно знать о фотограмметрии

      • Translation
      image

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

      Эта статья предназначена для следующих категорий пользователей:

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

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

      Выражаю особую благодарность Югославу Пендичу (Jugoslav Pendić) за редактирование и дополнение этой статьи. Ещё я благодарю команду, занимающуюся 3D-сканированием, за ликвидацию пробелов в моих знаниях.
      Читать дальше →
    • Определяем пульс по вебкамере в 50 строчек кода

        Привет Хабр.

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

        Для тех кому интересно что получилось, продолжение под катом.

        Читать далее
      • Shodan — темный близнец Google


          Источник
          S in IoT stands for Security
          Про Shodan уже не раз писали, в том числе и здесь. Я хочу предложить еще раз пробежаться по возможностям этого замечательного инструмента и принципам его работы. Сразу хочу оговориться, ситуация с этим поисковиком вполне классическая для исследователей в области информационной безопасности — инструмент может использоваться как с благими намерениями, так и сильно за чертой закона.

          Disclamer:
          Использование самого поисковика не является чем-то наказуемым. Успешный вход в незакрытую панель управления узла нефтяного терминала где-то в Сингапуре и эксперименты с открыванием заслонок — уже наказуемы. Могут прийти и постучаться недружелюбные люди. Поэтому будьте благоразумны и уважайте чужое пространство. Мы против применения Shodan для чего-то кроме исследовательских целей или анализа собственных систем.

          Предлагаю еще раз пройтись по возможностям этого поисковика, особенностям его синтаксиса и попробовать найти что-то интересное. И давайте не будет печатать «Войну и Мир» на чужих сетевых принтерах.
          Читать дальше →
        • Хранение мира в Snake Rattle'n'Roll

            Много лет назад мне довелось поиграть на Dendy в игру Snake Rattle'n'Roll. Пройти её мне тогда так и не удалось, из-за широко известного в узких кругах бага с фонтанчиком на 7 уровне. Да, и на данный момент игра так и не пройдена. Прогресс пока остановился на последнем уровне из-за его сложности. Игра сама по себе для NES была достаточно нестандартна. Это был изометрический мир, в котором надо было карабкаться верх, по пути собирая бонусы, поедая ниблов (местная живность) и сражаясь с ногами, шашками и прочими грибами. Вроде бы ничего необычного, но продвигаясь дальше по уровням я замечал, что мир хоть и был разбит на уровни, но был единым целым, просто каждый из уровней происходил в другой ограниченной части этого мира. И вот однажды мне захотелось получить 3D модель данного мира, с целью распечатать себе сувенир на 3D принтере. Учитывая характеристики железа NES я представлял, что это будет не очень просто, как оно оказалось на самом деле судить вам. Итак, если вас заинтересовало исследование этого мира — добро пожаловать под кат.
            Читать дальше →
          • Туториал по Unreal Engine: Cel Shading

            • Translation
            image

            Благодаря физически точному рендерингу в Unreal Engine 4 удобно разрабатывать реалистичные игры. Модель рендеринга имитирует взаимодействие света с материалами, что приводит к созданию реалистичной картинки. Однако если вы хотите разработать игру со стилизованным внешним видом, то вам придётся исследовать другие техники.

            Один из способов создания стилизации — использование cel shading (также известного как toon-шейдинг). Эта техника подражает затенению, обычно используемому в мультфильмах и аниме. Примеры её использования можно увидеть в таких играх, как Jet Set Radio, The Legend of Zelda: The Wind Waker и Gravity Rush.

            В этом туториале вы научитесь следующему:

            • Создавать и использовать материал постобработки
            • Создавать cel-шейдер
            • Изолировать cel-шейдер для отдельных мешей
            • Управлять цветовыми полосами с помощью таблиц поиска
            Читать дальше →
            • +24
            • 15.5k
            • 6
          • Поля расстояний Raymarching-а: объяснение и реализация в Unity

            • Translation
            image

            Raymarching — это достаточно новая техника, используемая для рендеринга сцен реального времени. Она особенно интересна тем, что полностью вычисляется в шейдере экранного пространства. Другими словами, рендерер не получает доступа к данным мешей и сцена отрисовывается на одном четырёхугольнике, покрывающем всю область видимости камеры. Объекты в сцене задаются аналитическим уравнением, описывающим кратчайшее расстояние между точкой и поверхностью всех объектов сцены (поэтому полностью техника называется полями расстояний Raymarching-а). Оказывается, что даже при наличии только этой информации мы можем создавать поразительно сложные и красивые сцены. Более того, благодаря тому, что мы не используем полигональные меши (и вместо них применяются математические уравнения), здесь, в отличие от традиционного рендерера, можно задавать идеально плавные поверхности.


            Snail Иниго Килеза была полностью создана при помощи raymarching. Другие примеры подвергнутых raymarching-у сцен можно найти на Shadertoy.

            В этой статье мы сначала расскажем о фундаментальных понятиях и теории raymarching, а затем покажем, как реализовать простейший raymarcher в игровом движке Unity. Далее мы продемонстрируем, как на практике встроить raymarching в настоящую игру на Unity, позволив объектам с raymarching-ом перекрываться обычными GameObjects.

            Полный код можно найти в этом репозитории Github.
            Читать дальше →
            • +21
            • 5.4k
            • 5
          • [Часть 1/2] Руководство по FFmpeg и SDL или Как написать видеоплеер менее чем в 1000 строк

            • Translation

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

            И хотя мы старались, в таком объёмном тексте неизбежны трудности перевода. Сообщайте о недочётах (желательно, в личных сообщениях) — вместе сделаем лучше.

            Оглавление

            Читать дальше →
          • [Перевод] Смыть

            Привет, Хабр! Представляю вашему вниманию перевод статьи «To Wash It All Away» автора James Mickens.



            Когда я учился в аспирантуре в Анн-Арбор, у меня был друг, глубоко увлеченный движением защитников окружающей среды. Он покупал еду у местных фермеров, ездил на велосипеде вместо машины, желая уменьшить выбросы, и держал жуткое компостное ведро, которое, вероятно, будет источником следующей пандемии гриппа. Однажды он сказал мне, что собирается неделю пожить на ферме. Я спросил зачем, и он ответил, что хочет «побыть ближе к земле» — фраза, которую вы можете произнести с серьёзным лицом, только комментируя документальный фильм о древних южноамериканских племенах. Я сказал моему другу, что земля не хочет побыть ближе к нему и что если бы он действительно присмотрелся к земле, то увидел бы не молочные реки и кисельные берега, а голод, стервятников, непосильный труд с использованием тачек и в целом неприемлемые количества насекомых. Он разразился продолжительной лекцией об экологической ответственности, которую я тут же выбросил из головы, потому что понял, что мой наивный друг даст дуба на этой ферме, и посоветовал ему без колебаний возвращаться, если вдруг ему там будет недостаточно хорошо. Он улыбнулся мне так, как улыбаются люди в фильмах ужасов за минуту до встречи с топором, и отчалил.
            Читать дальше →
          • Создаем интернет-магазин на Nuxt.js 2 пошаговое руководство Часть 1


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


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


            В этой статье я хочу поделиться как создать примитивный интернет-магазин:


            • Который будет быстро загружаться у пользователя.
            • Который полюбит Google (или любой другой поисковик) с точки зрения SEO.
            Читать дальше →
            • +15
            • 21.7k
            • 8
          • Zip-файлы: история, объяснение и реализация

            • Translation


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

            В статье очень подробно объясняется, как работают Zip-файлы и схема сжатия: LZ77-сжатие, алгоритм Хаффмана, алгоритм Deflate и прочее. Вы узнаете историю развития технологии и посмотрите довольно эффективные примеры реализации, написанные с нуля на С. Исходный код лежит тут: hwzip-1.0.zip.
            Читать дальше →
          • Ray Casting Visual Search (RCVS). Простой и быстрый алгоритм поиска схожих по геометрии 3D моделей



            Для меня эти две модели очень похожи, однако у них нет очевидных характеристик, по которым можно было бы измерить их сходство. У этих моделей разное количество вершин, рёбер и полигонов, они разного размера, к тому же по-разному повёрнуты в пространстве, и у обеих одинаковые трансформации (Положение = [0,0,0], Вращение в радианах = [0,0,0], Масштаб = [1,1,1]). Как определить их подобие?
            Читать дальше →
          • ARM MBED OS. Работа с произвольным МК STM32 под PlatformIO

              imageКогда в январе сего года я писал материал о файловой системе LittleFS (интегрированной в состав arm mbed os), то обещал в скорейшем времени описать создание проекта с arm mbed os для произвольного микроконтроллера STM32. Как известно, онлайн IDE от ARM (а точнее, выделенного подразделения Arm mbed) поддерживает, во-первых, строго определенное число отладочных плат, и число их невелико; во-вторых, экспортирует онлайн-примеры, на базе которых можно строить какие-то свои проекты, только для наиболее известных IDE: ARM, uVision KEIL и IAR. Более того, некоторые примеры не экспортируются вовсе. То есть, доступны для экспорта или только варианты для IAR, или только для KEIL, и так далее. Так что, как в то время показалось, научиться “прикручивать” arm mbed os к любому МК было бы не лишним вовсе.

              Однако, жизнь вносит свои коррективы в любые планы, и работать в этом направлении длительное время не получалось. Но вопрос оставался открытым, и теперь, по прошествии значительного времени, я возвращаюсь к тематике.
              Читать дальше →
              • +20
              • 21.1k
              • 7
            • Почему быстрая сортировка на самом деле медленная? Новый метод сортировки массива

              imageМногие программисты думают, что Quick Sort — самый быстрый алгоритм из всех существующих. Отчасти это так. Но работает она действительно хорошо только если правильно выбран опорный элемент (тогда сложность составляет O (n log n)). В противном же случае асимптотика будет примерно такой же как и у пузырика (то-есть O (n2)).
              При этом, если массив уже отсортирован, то алгоритм всё-равно будет работать не быстрее, чем O (n log n)


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

              «Дело было вечером, делать было нечего», — Сергей Михалков.

              Требования:


              1. Лучший случай O (n)
              2. Средний случай O (n log n)
              3. Худший случай O (n log n)
              4. В среднем быстрее быстрой сортировки


              А теперь давайте обо всём по порядку


              Чтобы наш алгоритм всегда работал быстро, нужно чтобы в среднем случае асимптотика была хотя бы O (n log n), а в лучшем — O (n). Все мы прекрасно знаем, что в лучшем случае сортировка вставками работает за один проход. Но в худшем ей придётся гонять по массиву столько раз, сколько в нём элементов.


              Читать дальше →
            • Что принёс нам Pandas 1.0

              • Translation


              9 января состоялся релиз Pandas 1.0.0rc. Предыдущая версия библиотеки — 0.25.


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


              Все изменения можно посмотреть здесь, в статье же мы ограничимся небольшим, менее техническим обзором самого главного.

              Читать дальше →
              • +40
              • 12.6k
              • 6
            • Разработка идеального pypi пакета с поддержкой разных версий python

              Это небольшой мануал/история о том, как создать "идеальный" pypi пакет для python, который каждый желающий сможет установить заветной командой:


              pip install my-perfect-package

              Ориентирована на новичков, но призываю и профессионалов высказать свое мнение, как можно улучшить "идеальный" пакет. Поэтому прошу под кат.

              Читать дальше →
            • Deep Reinforcement Learning: как научить пауков ходить


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


              Основой решения является алгоритм Advantage Actor Critic (A2C) с оценкой Advantage через Generalized Advantage Estimation (GAE).


              Под катом математика, реализация на TensorFlow и множество демок того, к каким способам ходьбы сошлись алгоритмы.


              Читать дальше →
            • Процедурная генерация многоэтажных 3D-подземелий

              • Translation
              image

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

              Код примера выложен в репозитории Github. Для демонстрации я использую Unity3D, но эти концепции, разумеется, применимы к любому другому движку.

              Два измерения


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

              Сцена для этого примера называется Dungeon2D. Код для него находится в папке Scripts2D.

              Алгоритм


              Мир разделён в виде прямоугольной сетки. Я предполагаю, что 1 единицы будет достаточно для обозначения коридора. В полной игре 1 единица измерения Unity может соответствовать например 5 метрам. Для сетки я выбрал размер 30×30.
              Читать дальше →
              • +46
              • 9.9k
              • 6