• Откуда взялся Волшебник из «Обыкновенного чуда»

      Первый был полукровкой — русская мама и папа-еврей. Внешне он был типичным евреем — брюнет, с большим носом и грустными еврейскими глазами.

      image

      Он был очень неправильным евреем.

      Когда подавляющее большинство его соплеменников делало Революцию, он, прапорщик военного времени, вступил в создаваемую Добровольческую армию и ушел с белыми в знаменитый «Ледяной поход» в составе екатеринодарских частей «мгновенного генерала» Покровского.

      Когда он прорывал оборону Екатеринодара в марте 1918 года, был сильно контужен, и эта контузия до конца жизни напоминала ему о белогвардейском прошлом тремором рук.

      Больше он никогда не воевал.

      После Гражданской он немного актерствовал, а потом ушел в журналистику.

      Его звали Евгений Львович Шварц.

      image

      Второй был чистопородным казаком — родился в станице Каменской, где его богатый отец был одним из самых уважаемых и авторитетных станичников. Николай Чуковский описывал его так: «Он был казак, и притом типичнейший — белокурый, румяный, кудрявый, похожий лицом на Кузьму Пруткова, с чубом, созданным богом для того, чтобы торчать из-под фуражки с околышком».

      image

      Он был очень неправильным казаком.

      В то время как подавляющая часть его станичников искренне презирала «голоштанных пролетариев», он всем сердцем поверил в Революцию, и, как в песне — «хату покинул, пошел воевать». В отличие от Шварца, которого сразу выбили, этот Гражданскую хлебнул полной ложкой.
      Читать дальше →
    • Active Restore: С чего начать разработку в UEFI

        Всем привет. В рамках проекта от компании Acronis со студентами Университета Иннополис (подробнее о проекте мы уже описали это тут и тут) мы изучали последовательность загрузки операционной системы Windows. Появилась идея исполнять логику даже до загрузки самой ОС. Следовательно, мы попробовали написать что-нибудь для общего развития, для плавного погружения в UEFI. В этой статье мы пройдем по теории и попрактикуемся с чтением и записью на диск в pre-OS среде.


        cover

        Читать дальше →
        • +49
        • 6.6k
        • 6
      • Пишем операционную систему. Часть 1. Загрузчик

        Всем привет! Сегодня мы напишем загрузчик, который будет выводить «Hello World» и запустим его на VirtualBox. Писать будем на ассемблере FASM. Скачать его можно отсюда. Также нам понадобится собственно VirtualBox и UltraISO. Перед тем как писать код, разберемся как загружаются операционные системы.

        Итак, когда мы нажимаем большую кнопку включения на нашем компьютере запускается система, которая есть на любом компьютере — BIOS (Basic Input/Output System или базовая система ввода/вывода). Задача BIOS это:

        Читать дальше →
      • Собираем недорогой 9.7" E-Ink дисплей для отображения чего угодно

        Всем привет. Давно хотел собрать большой E-Ink дисплей, который можно поставить на стол и отображать на нем полезную информацию (погоду, календарь и т.д.) В этой статье расскажу, как можно собрать такое устройство на базе ESP32 и дисплея от Kindle DX значительно дешевле, чем Waveshare.


        Читать дальше →
      • В МТИ разработали модель, которая показывает, как мозг обрабатывает изображения лиц

          imageФото: news.mit.edu

          Исследователи из Массачусетского технологического института создали компьютерную модель, которая отражает способность зрительной системы человека быстро генерировать подробное описание сцены из изображения и дает некоторое представление о том, как работает мозг.
          Читать дальше →
        • Компьютерное зрение на WebRTC-сервере с аппаратным ускорением от Intel OWT

          • Translation
          • Tutorial

          WebRTC упростил (в большинстве своем) получение и отправку видеопотоков в реальном времени. А значит, можно немного поразвлекаться с ними при помощи машинного обучения. В прошлом месяце я показал, как запустить компьютерное зрение (Computer Vision – CV) локально в браузере. Как я уже упоминал, локально – это, конечно, хорошо, но иногда требуется более высокая производительность, и для этого нам понадобится удаленный сервер. В данном посте я расскажу о том, как запускать серверные модели OpenCV с аппаратным ускорением на чипсетах Intel с помощью Open WebRTC Toolkit (OWT) с открытым исходным кодом.
          Читать дальше →
          • +38
          • 5.1k
          • 1
        • 5 JavaScript-библиотек для работы со строками

          • Translation
          Работа со строками может оказаться непростым делом из-за того, что она подразумевает решение множества разноплановых задач. Например, для простого приведения строки к «верблюжьему» стилю понадобится несколько строк кода:

          function camelize(str) {
            return str.replace(/(?:^\w|[A-Z]|\b\w|\s+)/g, function(match, index) {
              if (+match === 0) re
          turn ""; // или if (/\s+/.test(match)) для пробелов
              return index === 0 ? match.toLowerCase() : match.toUpperCase();
            });
          }
          

          Этот фрагмент кода, кстати, в роли ответа на вопрос о приведении строк к «верблюжьему» стилю, собрал больше всего голосов на Stack Overflow. Но даже он не в состоянии правильно обработать, например, такую строку:

          ---Foo---bAr---
          


          Результат обработки строки ---Foo---bAr---

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

          Поговорим о нескольких JavaScript-библиотеках, предназначенных для работы со строками.
          Читать дальше →
          • +39
          • 6.3k
          • 9
        • Сколько кода на C++ нужно написать для разбора HTTP-заголовка Authorization с помощью easy_parser из RESTinio?


            Мы продолжаем развивать бесплатный и открытый встраиваемый в С++ приложения HTTP-сервер RESTinio. В реализации RESTinio активно используются C++ные шаблоны, о чем мы здесь регулярно рассказываем (недавний пример).


            Одной из точек приложения C++ной шаблонной магии стал easy_parser, небольшая реализация нисходящего рекурсивного парсера на базе PEG. Easy_parser был добавлен в RESTinio в прошлом году для того, чтобы упростить работу с HTTP-заголовками.


            Мы уже немного обсуждали easy_parser-е в предыдущей статье. А сегодня хочется показать как же easy_parser применяется при разработке RESTinio. На примере разбора содержимого HTTP-заголовка Authorization. Попробуем, так сказать, заглянуть в потроха RESTinio.


            Грамматика Authorization


            Структура заголовка Authorization определена в RFC7235 следующим образом:

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



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

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

              • Translation
              Перевод статьи из блога инженера Джорджа Хиллиарда


              Кликабельно

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

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

              Я подумал: «Эти процессоры настолько дешёвые, что их практически можно раздавать даром». И через некоторое время ко мне пришла идея сделать голую карточку для Linux в форм-факторе визитной карточки.
              Читать дальше →
            • Настоящее суммирование интернет-каналов — OpenMPTCPRouter



                Можно ли объединить несколько интернет-каналов в один? Вокруг этой темы куча заблуждений и мифов, даже сетевые инженеры с опытом часто не знают о том, что это возможно. В большинстве случаев, объединением каналов ошибочно называют балансировку на уровне NAT или failover. Но настоящее суммирование позволяет пустить одно единственное TCP-подключение одновременно по всем интернет-каналам, например видеотрансляцию так, чтобы при обрыве любого из интернет-каналов вещание не прерывалось.

                Существуют дорогие коммерческие решения для видеотрансляций, но такие устройства стоят много килобаксов. В статье описывается настройка бесплатного, открытого пакета OpenMPTCPRouter, разбираются популярные мифы о суммировании каналов.
                Читать дальше →
              • Процедурные дороги в Houdini и Unity

                • Translation
                image

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

                Раньше, когда не знал о Houdini, я писал на C# собственные инструменты процедурной генерации мешей для Unity. Добавление новых функций было очень долгим процессом, и когда я однажды услышал, что Houdini предназначен для подобных задач, то сразу перешёл на него. Я поэкспериментировал с разными способами генерации городов и улиц, и в этой статье я вкратце расскажу о методике, которая в конечном итоге была использовала для игры.

                Сначала я создал инструмент для генерации сети улиц, которые можно было бы использовать в городе. Моё решение основано на изложенных здесь концепциях, а также на использованной по ссылке статье. Там много говорится о тензорных полях и собственных векторах, и всё написано очень технически, но вкратце это можно объяснить так: для моего случая (генерации дорожной сети на рельефе) мне нужно было сгенерировать контурные линии рельефа, а также линии, перпендикулярные им.
                Читать дальше →
                • +37
                • 9.4k
                • 6
              • Как написать сапера на Phaser и выполнить тестовое задание HTML5 разработчика

                • Tutorial
                Добрый день, уважаемые коллеги!

                Меня зовут Александр, я разработчик HTML5 игр.

                В одной из компаний, куда я отправлял свое резюме, мне предложили выполнить тестовое задание. Я согласился и, спустя 1 день, отправил в качестве результата разработанную по ТЗ HTML5 игру.



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

                Данная статья даст представление об объеме работ, достаточном для успешного выполнения среднестатистического тестового задания на позицию HTML5 разработчика. Материал также может быть интересен всем, кто хочет познакомиться с фреймворком Phaser. А если вы уже работаете с Phaser и пишете на JS — посмотрите, как разработать проект на TypeScript.

                Итак, под катом много кода на TypeScript!
                Читать дальше →
              • Бэрримор, что за шум вокруг Voximplant? Внедрили веб-сокеты, сэр

                • Tutorial

                WebSocket — это прогрессивный стандарт полнодуплексной (двусторонней) связи между клиентом и сторонним сервисом в режиме реального времени. Веб-сокеты используются для организации непрерывного обмена данными без дополнительных HTTP-запросов.

                И мы рады сообщить вам, что все это стало возможным в Voximplant благодаря новому модулю VoxEngine, который называется – сюрприз – WebSocket. Отныне вы сможете передавать текст и аудио, пользуясь преимуществами веб-сокетов в полной мере. Проще говоря, у вас появился еще один инструмент, чтобы прокачать ваше приложение.

                Из этой статьи вы узнаете, как создать исходящее WebSocket-соединение, передать через него аудиопоток и преобразовать его в текст с помощью Google Cloud Speech-to-Text API.
                Читать дальше →
                • +30
                • 6.1k
                • 9
              • Интересные новинки Vue 3

                • Translation

                Вместо предисловия


                Vue используется во всех проектах FunCorp. Мы внимательно следим за развитием фреймворка, постоянно улучшаем процесс разработки и внедряем лучшие практики. И, конечно же, мы не могли пройти мимо и не перевести статью Филиппа Раковски, сооснователя VueStorefront, про новые фичи Vue 3, серьёзно влияющие на написание кода.

                image
                В прошлый раз мы рассматривали фичи, которые влияют на производительность Vue 3. Нам уже известно, что приложения, написанные на новой версии фреймворка, работают очень быстро, но производительность — не самое важное изменение. Для большинства разработчиков намного важнее то, как Vue 3 повлияет на стиль написания кода.
                Читать дальше →
              • 5 приемов в помощь разработке на vue.js + vuex

                • Tutorial
                Недавно решил разобраться с vue.js. Лучший способ изучить технологию — что-нибудь на ней написать. С этой целью был переписан мой старый планировщик маршрутов, и получился вот такой проект. Код получился достаточно большим для того, чтобы столкнуться с задачей масштабирования.

                В этой статье приведу ряд приемов, которые, на мой взгляд, помогут в разработке любого крупного проекта. Этот материал для вас, если вы уже написали свой todo лист на vue.js+vuex, но еще не зарылись в крупное велосипедостроение.


                Читать дальше →
              • Как работают пули в видеоиграх?

                • Translation
                Игры FPS (first-person shooter, шутер от первого лица) стали неотъемлемой частью видеоигровой индустрии ещё с момента появления в 1992 году популярнейшей Wolfenstein 3D. С тех пор жанр эволюционировал: улучшалась графика, увеличивались бюджеты на разработку, развивалась экосистема киберспорта. Но что насчёт их фундамента — механики стрельбы? Как проходило развитие на этом фронте? Почему в некоторых играх оружие кажется реальными, а в других похоже на игрушки?

                Hitscan


                В предыдущую эпоху многие игры для рендеринга 3D-сцен в 2D-изображения использовали технику под названием raycasting («бросание лучей»). Raycasting позволяет движку определять первый объект, с которым пересечётся луч. Но потом разработчики задались вопросом: «Что, если выпустить луч из ствола оружия, чтобы имитировать пулю?» Благодаря этой идее родился hitscan («сканирование попадания»).


                Пример raycasting

                В большинстве реализаций оружия с hitscan при выстреле игрока физический движок выполняет следующие операции:

                • Определяет направление, в котором указывает оружие.
                • Выпускает из ствола оружия луч на заданное расстояние.
                • Использует raycasting для определения того, попал ли луч в объект.

                Если движок определил, что объект находится на линии огня, то он сообщит ему об этом, сказав, что в него «попала» пуля. Затем цель может выполнить все вычисления, необходимые для регистрации повреждений.
                Читать дальше →
              • Просто и на C++. Основы Userver — фреймворка для написания асинхронных микросервисов

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

                  Мы решили сделать свой фреймворк, с C++17 и корутинами. Вот так теперь выглядит типичный код микросервиса:

                  Response View::Handle(Request&& request, const Dependencies& dependencies) {
                    auto cluster = dependencies.pg->GetCluster();
                    auto trx = cluster->Begin(storages::postgres::ClusterHostType::kMaster);
                  
                    const char* statement = "SELECT ok, baz FROM some WHERE id = $1 LIMIT 1";
                    auto row = psql::Execute(trx, statement, request.id)[0];
                    if (!row["ok"].As<bool>()) {
                      LOG_DEBUG() << request.id << " is not OK of " << GetSomeInfoFromDb();
                      return Response400();
                    }
                  
                    psql::Execute(trx, queries::kUpdateRules, request.foo, request.bar);
                    trx.Commit();
                  
                    return Response200{row["baz"].As<std::string>()};
                  }
                  

                  А вот почему это крайне эффективно и быстро — мы расскажем под катом.
                  Читать дальше →
                • Безопасность для Docker-контейнеров

                  • Translation
                  Прим. перев.: Тема безопасности Docker, пожалуй, одна из вечных в современном мире IT. Поэтому без лишних объяснений представляем перевод очередной подборки соответствующих рекомендаций. Если вы уже интересовались этим вопросом, многие из них будут вам знакомы. А саму подборку мы дополнили списком из полезных утилит и несколькими ресурсами для дальнейшего изучения вопроса.



                  Предлагаю вниманию руководство по обеспечению безопасности Docker'а. Обратная связь приветствуется, так как это скорее сборник отрывков с разных ресурсов, и не все они были подвергнуты доскональной проверке. Рекомендации разделены на три категории:

                  1. Необходимые меры внутри операционной системы хоста при работе с Docker'ом;
                  2. Инструкции, относящиеся к файлу конфигурации сборки и созданию контейнеров;
                  3. Инструменты для безопасности, которые могут интегрироваться со специфическими функциями Docker Enterprise.
                  Читать дальше →
                  • +37
                  • 15.3k
                  • 7
                • Личный ад писателя Фраермана, или Повесть о первой любви

                    В детстве я, наверное, был антисемитом. И все из-за него. Вот он.

                    image

                    Он меня всегда раздражал. Я просто обожал великолепный цикл рассказов Паустовского про кота-ворюгу, резиновую лодку и т. д. И только он все портил.

                    Я долго не мог понять — зачем Паустовский тусил с этим Фраерманом? Какой-то карикатурный еврей, и имя у него дурацкое — Рувим. Нет, я, конечно, знал, что он автор книжки «Дикая собака динго, или Повесть о первой любви», но это только усугубляло ситуацию. Нет, книгу я не читал, и не собирался. Какой уважающий себя мальчишка будет читать книгу с таким сопливым названием, если «Одиссея капитана Блада» в пятый раз не читана?

                    А Паустовский… Паустовский был крутой. Реально крутой писатель, я почему-то это еще ребенком понимал.

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

                    image

                    А уж как я его зауважал, когда, поумнев, перечитал его книги… Паустовский не только многое видел и многое понял в этом мире — он был мудрым. А это очень редкое качество. Даже среди писателей.

                    Особенно среди писателей.

                    Примерно тогда же я понял и почему он тусил с Фраерманом.

                    А после недавнего рассказа о демонах Гражданской войны, решил рассказать и вам.
                    Читать дальше →