company_banner
  • Пишем загрузчик на Ассемблере и С. Часть 2

    • Перевод
    • Tutorial

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

    Здесь я ограничусь написанием программы на ассемблере и ее копированием в загрузочный сектор образа дискеты 3.5”, после чего мы, как и в прошлой статье, протестируем записанный загрузочный код при помощи эмулятора bochs. Для реализации этих задач я задействую службы BIOS, что позволит нам лучше понять их функционирование и более уверенно работать в реальном режиме (Real Mode).
    Читать дальше →
  • Разработка PWA с поддержкой распознавания лица и голоса

    • Перевод
    Этот материал посвящён продвинутым возможностям PWA (Progressive Web Application, прогрессивное веб-приложение), основанным на некоторых современных API. А именно, здесь мы поговорим о разработке веб-проекта, поддерживающего распознавание лица и голоса. Тем, что раньше было доступно только в обычных приложениях, теперь можно воспользоваться и в PWA. Это открывает веб-разработчикам множество новых возможностей.



    Приложение, о котором пойдёт речь, основано на PWA, разработка которого подробно описана в этом материале. Здесь мы уделим основное внимание следующим двум API:

    • Face Detection API, который предназначен для реализации возможностей по распознаванию лица в браузере.
    • Web Speech API, который позволяет преобразовывать речь в текст и «озвучивать» обычные тексты.

    Мы добавим поддержку этих API в существующее PWA и оснастим его функционалом создания «селфи». Благодаря возможностям по распознаванию лица приложение сможет выяснить эмоциональное состояние, пол и возраст того, кто делает «селфи». А снабдить снимок подписью можно будет, воспользовавшись Web Speech API.
    Читать дальше →
  • Пишем загрузчик на Ассемблере и C. Часть 1

    • Перевод
    • Tutorial


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



      Иногда разработчики “Желают странного” (С) А. Б. Стругацкие, из-за этого появляются необычные проекты, вроде запуска Doom на терминалах для считывания банковских карт и других, еще менее приспособленных для этого, девайсах. Чаще всего такое получается в результате тренировок, когда программист осваивает новую тему и реализует тестовый проект не в виде традиционного “Hello, Word!”, а чего-то более изощренного. Но ведь не все занимаются портированием древних шутеров на смарт-часы, есть и другие области разработки, более прикладные, но не менее интересные. Предположим, что человеку наскучило смотреть на длинные логи в консоли и grep’ать из них данные для отладки, хочется добавить интерактива и наглядности в свое обучение. Инструменты для этого выбираются самые разные, кто-то пользуется обычным графическим выводом, кто-то выводит данные через простенький сайт, а кто-то… пишет расширения для браузера!

      В этой статье я расскажу вам о нескольких не самых практичных (хотя о практичных — тоже расскажу), но необычных расширениях. Они вряд ли войдут в подборку типа: “Топ-10 самых полезных расширений для разработчика” или пригодятся для розыгрыша коллег, но заставят озадаченно почесать затылок: “Ну и фантазия у автора!..” или просто улыбнуться.
      Читать дальше →
    • Первое знакомство с отладчиком Ghidra и взлом игры Spiderman

      • Перевод


      В середине декабря в твиттер-аккаунте NSA было объявлено о релизе новой ветки Ghidra с долгожданной поддержкой отладки. Теперь с помощью GDB-заглушки и прочих механизмов можно будет выполнять ее пошагово внутри самой Ghidra. Желая отпраздновать это событие, которое совпало с моим домашним карантином, я подготовил небольшой обзор сборки этой версии, включая пример использования ее отладчика для интересной цели.
      Читать дальше →
    • Как дата-саентисты в ВК делают рекламу эффективной

        Еще в прошлом году у нас выступал Артем Попов, тимлид команды VK Performance Advertising. Делимся с вами расшифровкой эфира и записью.




        Меня зовут Артем, я – руководитель performance advertising в ВК. Наша команда занимается тем, что, с одной стороны, делает рекламу в ВК эффективнее, выгоднее для рекламодателей, интереснее для пользователей. Это большая продуктовая цель.

        С другой стороны, технически, мы – команда ML-инженеров, довольно обычных разработчиков, которые много времени занимаются задачами, связанными с data science и ML. Сегодня я хочу поговорить про эти две темы, потому что обе они мне интересны, я о них люблю поговорить. Я очень рассчитываю на то, что у нас будет живое общение; если кто-то смотрит трансляцию, будет интереснее, если вы будете писать вопросы.
        Читать дальше →
      • Эмуляция компьютера: интерпретатор CHIP-8, таймеры и обработка ввода

        • Перевод
        Мы уже создали вполне рабочий эмулятор CHIP-8, но он, к сожалению, получился очень медленным. Почему? Если заглянуть в его главный цикл — можно увидеть, что данные на экран выводятся после выполнения каждого шага цикла. При включённом vsync SDL пытается привязать скорость рендеринга к частоте обновления кадров дисплея (возможно это — 60 Гц). Для нас это означает то, что метод SDLViewer::Update, почти при каждом его вызове, долго будет находиться в заблокированном состоянии, ожидая сигнала vsync от монитора.



        Насколько быстро должен работать наш эмулятор? Точный ответ на этот вопрос дать не так уж и просто. На реальном компьютере на выполнение операций с разными кодами нужно разное время, но известны ориентировочные временные показатели выполнения различных операций. Можно выполнить инструкцию, выяснить то, сколько времени её выполнение должно занимать на реальном аппаратном обеспечении, а после этого «усыпить» программу до того момента, когда можно будет продолжать работу. Но тут есть одна проблема, которая заключается в том, что у нас, при таком подходе, нет доступа к временным параметрам работы CPU. На выполнение большинства этих инструкций должна уходить пара микросекунд, но на современных системах «усыплять» программы можно, как минимум, на одну миллисекунду.
        Читать дальше →
        • +40
        • 2,6k
        • 1
      • Обзор GameLisp: нового языка для написания игр на Rust


          Программист, подписывающийся псевдонимом Fleabit, уже полгода разрабатывает свой язык программирования. Сразу же возникает вопрос: ещё один язык? Зачем?

          Вот его аргументы:

          • Разработка движка игры и разработка игры на этом движке – две очень разные задачи, и для них удобно использовать разные языки, при условии, что код на них хорошо стыкуется друг с другом. Например, код на языке с garbage collection и на языке с явным управлением памятью было бы сложно объединить в одном проекте.
          • Rust идеально подходит для разработки движка игры: из языков, ориентированных на производительность скомпилированного кода, в нём максимум выразительных средств – enum-ы с полями; pattern matching с деструктуризацией; макросы, генерирующие произвольный код во время компиляции; и т.п. С другой стороны, для описания игровой механики Rust подходит плохо: задержки на перекомпиляцию усложняет подход «подправить и тут же проверить, что получилось»; строгое управление памятью усложняет использование одних данных одновременно несколькими объектами; а генераторы/сопрограммы, позволяющие удобно реализовать кооперативную многозадачность между внутриигровыми сущностями, ещё не реализованы.
          • Для игровой механики идеально подходил бы скриптовый язык наподобие JavaScript, Lua, Python или Ruby; но интеграция кода на них в проект на Rust – нетривиальная задача, отчасти из-за того, что эти полновесные языки программирования устроены запредельно сложно. Вдобавок, внутри игры напрашивается очень простой garbage collector, отрабатывающий после генерации каждого кадра, чтобы частота кадров оставалась постоянной – без внезапных подвисаний раз в десять минут, когда GC решил пройтись по всем объектам, созданным за эти десять минут. Другое важное преимущество GameLisp перед популярными скриптовыми языками – гомоиконичность, упрощающая обработку и генерацию кода макросами.

          Читать дальше →
          • +36
          • 5,6k
          • 7
        • Эмуляция компьютера: интерпретатор CHIP-8 и формирование изображений

          • Перевод
          Недавно мы опубликовали перевод первого материала из серии статей, посвящённой эмуляции компьютера. Автор этих статей подробно рассказывает о написании интерпретатора CHIP-8 на C++. В той публикации мы устроили опрос о целесообразности перевода продолжения цикла. Почти 94% тех, кто принял участие в опросе, продолжение перевода поддержали. Поэтому сегодня мы представляем вашему вниманию второй материал о CHIP-8.


          Читать дальше →
          • +35
          • 2,9k
          • 3
        • Первым в двадцать первый

            Я достаю из широких штанин
            Рейтинг
            И хвастаюсь гордо:
            «Смотрите, завидуйте,
            Номер один,
            А не просто айтишная морда».


            Третий год подряд мы заканчиваем на первом месте среди компаний на Хабре. Это не гонка «Формулы 1», это скорее наши «24 часа Ле-Мана», когда на предельном ресурсе и в самых неприятных условиях ты вынужден не останавливаться сутки. Только у нас это не 24 часа, а 24/7/366. И даже сейчас, за несколько часов до Нового года мы пишем этот пост, чтобы не просто рассказать о рекордах, но и немного рассказать о том, как к этому приблизиться.


            Мы тут не без самоиронии :)

            Все расчёты в этой публикации основаны на анализе CSV-файла с информацией обо всех постах блога, который можно экспортировать в панели управления корпоративного блога — спасибо Хабру за такую возможность.
            Читать дальше →
          • 70 лет компьютерной истории, обращенные в музыку

            • Перевод

            Реконструкция Colossus в британском Национальном музее вычислительной техники, Блетчли парк

            Поздно ночью в британском Национальном музее вычислительной техники несколько старейших машин пробудились от длительного механического сна. Композитор и саунд-дизайнер Мэтт Паркер сделал 126 записей звучания компьютеров, заключавших в себе 70-летнюю историю развития, чтобы сохранить эти редчайшие голоса и преобразовать их в музыку.
            Читать дальше →
            • +26
            • 3,1k
            • 6
          • Как мы устроили допрос на детекторе лжи с помощью Котлина, книг по режиссуре и OBS: изнанка спецпроекта

              image

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

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

              Мы прикрутили к сайту геймификацию и каждый раз после ответа игроки получали 15 секунд, чтобы решить, правду говорит девушка или лжет. За правильные ответы набирались баллы.

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

              • Перевод

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


              В журнале «Cyberpsychology, Behavior, and Social Networking» были опубликованы результаты продольного исследования, которое продолжалось десять лет. Оно было посвящено изучению того, как игра в жестокие видеоигры в раннем подростковом возрасте (10 лет) отражается на поведении взрослых людей (23 года). Это исследование не нашло корреляции между игрой в жестокие видеоигры в детстве и повышенным уровнем агрессии по прошествии десяти лет.


              Читать дальше →
            • TreeOS. 16-битная рождественская демка в загрузочном секторе



                В преддверии Нового Года бороздил просторы сети, и нашёл замечательную демку на ассемблере рисования новогодней ёлки. Демка не простая, а золотая, написана таким образом, чтобы работала в загрузочном секторе диска, фактически микрооперационная система, если её так можно назвать. Из-за большой любви к Новому Году и ассемблеру, решил таки её немного разобрать, и восхититься мастерством автора. Итак, поехали.
                Читать дальше →
              • Шифрование данных на виртуальном сервере



                  Немного здоровой паранойи еще никому не вредило. Помимо мессенджеров с оконечным шифрованием, шифрованием файлов на смартфонах «из коробки» и обязательным использованием SSL на сайтах, не лишним будет защитить данные на виртуальных серверах. Тем более, современные технологии сделали это простым и доступным любому пользователю. Крупные провайдеры, предоставляющие услуги хостинга VPS, предлагают шифровать данные пользователей используя стандартные средства операционных систем. Например, Microsoft, в своем облаке Azure, использует для серверов на Windows — BitLocker, а для виртуальных машин на Linux — DM-Crypt. Эти средства позволяют сохранить приватность ваших данных, даже если злоумышленник получит доступ к ЦОДу, где находятся сервер или вашему локальному компьютеру.

                   Можно доверять свои данные хостерам предоставляющим VPS, можно не доверять, но никто не запретит вам использовать те же самые способы у любого VPS-провайдера, настроенные самостоятельно. В этой статье я расскажу вам как это сделать.
                  Читать дальше →
                • Подключение геймпада к Raspberry Pi

                  • Перевод
                  Автор статьи, перевод которой мы сегодня публикуем, Эрик Гебельбекер, недавно собрал робота, основанного на одноплатном компьютере Raspberry Pi. Он хочет сделать так, чтобы роботом можно было бы управлять, пользуясь геймпадом. А для этого геймпад нужно подключить к Raspberry Pi. Эрик несколько лет назад публиковал статью, посвящённую решению этой задачи. Данный материал представляет собой обновлённый вариант той статьи.


                  Робот, основанный на Raspberry Pi, и геймпад
                  Читать дальше →
                  • +24
                  • 2,8k
                  • 2
                • 5 лет назад в будущее: как выглядел 2020 из 2015

                    Spoiler: хорошо

                    В этом году, в декабре, нам исполняется 5 лет. В далёком 2015 мы пришли в самый динамичный и скоростной мир технологий. Действительно, если для каких-то отраслей пятилетка — это просто план развития, то для айтишников это революция за революцией. 

                    Иногда крайне сложно предсказать, что будет в конце текущего года, а не только спустя огромный по меркам нашей сферы период. Тем не менее отважные эксперты в 2015 году рассказывали о том, каким видят мир в 2020, какие технологии будут преобладать, какие исчезнут, куда шагнёт медицина и наука, как станут выглядеть облака и серверы, что станет с бизнесом. Честно говоря, мы не встретили ни одного прогноза вроде «ААААА!!! Не ходите в 2020», наоборот, аж улыбались, изучая, в каком дивном новом мире нам предстояло жить. 

                    Прогуляетесь по этим душевным планам с нами? 

                    Читать дальше →
                  • Способы использования Math.random() в JavaScript

                    • Перевод
                    Math.random() — это один из API JavaScript. Это — функция, которая возвращает случайные числа. Диапазон возвращаемых чисел представлен значениями от 0 (включая 0, то есть, она может вернуть 0) до 1 (не включая 1, то есть — единицу она вернуть не может).

                    Math.random(); // возвращает случайное число
                    

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


                    Читать дальше →
                  • Путешествие байта данных во времени

                    • Перевод


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

                    В качестве первого и самого простого примера можно взять перфоленты, где бит данных хранился в виде наличия или отсутствия дырки в определенном участке. Если же углубиться дальше во времена аналитической машины Бэббиджа, то в ней бит представлялся путем изменения положения механической шестеренки или рычага. На магнитных устройствах хранения, таких как ленты и диски, единица информации представляется полярностью определенной области магнитной пленки. В современной динамической оперативной памяти (DRAM) бит выражается одним из двух возможных уровней электрического заряда конденсатора.
                    Читать дальше →
                  • Анонс: как дата-саентисты в ВК делают рекламу эффективной


                      Завтра, 28 декабря в 20:00 у нас выступает Артем Попов — тимлид команды VK Performance Advertising.

                      Артем руководит командой, которая занимается задачами, связанными с Data Science в рекламе. Их задача делать рекламу в ВК эффективнее и выгодней.

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

                      Артем расскажет про интересные задачи для дата-саентистов в мире рекламы.


                      Читать дальше →
                      • +22
                      • 1,6k
                      • 3

                    Самое читаемое