• Операционные системы с нуля; Уровень 0

    • Translation
    • Tutorial

    Добрый день/вечер/ночь/утро! Есть один экспериментальный курс по операционным системам. Есть он в Стэнфордском университете. Но часть материалов доступно всем желающим. Помимо слайдов доступны полные описания практических занятий.


    Чем этот курс отличается от прочих других? Большая часть кода пишется самостоятельно и выполняется на вполне реальном современном железе. В качестве целевой платформы выбран Raspberry Pi 3 model B. Т.е. достаточно актуальная архитектура AArch64. ARMv8 Cortex-A53, четыре ядра, 64-бита и вот это всё. В качестве основного языка программирования выбран Rust. Который безопасный, быстрый, без GC и так далее. Его, Rust, предполагается изучать во время курса.


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

    Читать дальше →
  • 7 правил проектирования печатных плат

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

      Я обещал пользователю KSVl и некоторым другим читателям, статью с базовыми принципами проектирования печатных плат (ПП), так же приглашаю к ознакомлению всех любителей попаять за чашечкой кофе!


      Читать дальше →
    • Ethercat для начинающих

      Некоторое время назад у нас появился объект, где в техническом задании стояло требование: «Протокол Ethercat». В процессе поиска информации я полез на хабр и с удивлением обнаружил, что там разбора этого протокола нет. Да и вообще информация о нем довольно фрагментирована (забегая вперед — я просто не там искал). Проект мы сделали, а эта статья — для «более молодого меня», попытка сэкономить время кому-нибудь еще, кто собирается использовать или просто интересуется этим протоколом.


      Единственный нюанс — я опишу довольно низкий уровень работы протокола (Data Layer в терминологии EtherCAT). Потому что именно он нам понадобился и им мы ограничились. Неописанными (пока?) останутся Application Layer протоколы типа CanOPEN-over-EtherCAT (CoE).


      Читать дальше →
    • Имитация рисования от руки на примере RoughJS

      • Translation
      RoughJS это маленькая (<9 КБ) графическая библиотека JavaScript, позволяющая рисовать в эскизном, рукописном стиле. Она позволяет рисовать на <canvas> и с помощью SVG. В этом посте я хочу ответить на самый популярный вопрос о RoughJS: как это работает?


      Немного истории


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

      Вкратце изучив вопрос, я нашёл статью Джо Вуда и его коллег под названием Sketchy rendering for information visualization. Описанные в ней техники стали основой библиотеки, особенно в рисовании линий и эллипсов.

      В 2017 году я написал первую версию библиотеки, которая работала только на Canvas. Решив задачу, я потерял к ней интерес. Год спустя я много работал с SVG, и решил адаптировать RoughJS для работы с SVG. Также я изменил структуру API, сделав её более простой, и сосредоточился на простых векторных графических примитивах. Я рассказал о версии 2.0 на Hacker News и внезапно она обрела огромную популярность. В 2018 году это был второй по популярности пост ShowHN.
      Читать дальше →
      • +46
      • 7.9k
      • 2
    • Литье форм из жидкого силикона в домашних условиях

      • Tutorial
      image

      В прошлый раз я описывал разработку набора для фокуса «Растворимая ложка», в котором фигурировала форма из силикона.

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

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

        image
        Читать дальше →
      • Начинаем работать в STM32CubeMX. Часть 1

        • Tutorial
        Часть 2
        Часть 3

        Приветствую аудиторию хабра, и хочу предложить вашему вниманию первый пост, посвященный использованию среды разработки STM32CubeMX, написанный для тех, кто хочет начать изучение STM32 «с нуля».



        Я планировал написать несколько постов, рассмотрев несколько периферийных устройств микроконтроллера и их конфигурирование в STM32CubeMX. Но эти посты не заменяют фирменной документации и не претендуют на полноту. В них будут рассмотрены только некоторые, наиболее, на мой взгляд, типичные, примеры использования периферии STM32.
        Надеюсь, кому-то этот материал будет полезен.
        Итак, начнём
      • «Технология» получения уравнений динамики ТАУ. И почему System Identification is sucks, а рулит «честная физика»

        • Tutorial
        При обсуждении предыдущей статьи про модельно-ориентированное проектирование возник резонный вопрос: если мы используем данные эксперимента, а можно ли поступить еще проще, засунуть данные в System Identification и получить модель объекта, не заморачиваясь с физикой вообще? Не изучая всякие многоэтажные формулы Навье-Стокса, Бернулли и прочих Штангель циркулей с Рабиновичами? Испытали объект – получили результат.

        image

        Мы же представляли модель ракеты ФАУ2 в виде одной передаточной функции, можно посмотреть здесь… И, вроде, все работало. Зачем же нам нужно сначала изучать математический анализ и дифференциальные исчисления, когда есть волшебная кнопка, получающая модель из испытаний?
        Читать дальше →
      • Пишем драйвер для самодельного USB устройства

        Целью этой статьи является пошаговая демонстрация процесса разработки всего набора программного обеспечения необходимого для организации связи самодельного устройства с компьютером посредством USB.

        На данный момент, большинство радиолюбителей реализуют такой тип подключения используя чипы переходники USB в RS232 таким образом организуя связь со своим устройством посредством драйвера виртуального COM порта поставляемого с чипом переходником. Минусы такого подхода думаю понятны. Это как минимум лишний чип на плате и ограничения накладываемые этим чипом и его драйвером.
        Мне же хочется осветить весь процесс организации такого взаимодействия так как оно и должно быть сделано, и как делается во всех серьезных устройствах.
        В конце концов, сейчас 21-й век, модуль USB есть почти во всех микроконтроллерах. Именно о том, как наиболее быстро воспользоваться этим модулем и будет эта статья.
        Читать дальше →
      • Простейшее профилирование памяти на STM32 и других микроконтроллерах

          «С опытом приходит стандартный, научный подход к вычислению правильного размера стека: взять случайное число и надеяться на лучшее»
          — Jack Ganssle, «The Art of Designing Embedded Systems»


          Привет, Хабр!

          Как ни странно, но в абсолютном большинстве виденных мной «учебников для начинающих» по STM32 в частности и микроконтроллерам вообще нет, как правило, вообще ничего про такую вещь, как распределение памяти, размещение стека и, главное, недопущение переполнения памяти — в результате которого одна область перетирает другую и всё рушится, обычно с феерическими эффектами.

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

          Такие контроллеры позволяют делать вполне себе серьёзные штуки (ну вот у нас, например, такая вполне себе годная измериловка сделана на STM32F042K6T6 с 6 КБ ОЗУ, от которых свободными остаются чуть больше 100 байт), но при обращении с памятью при работе с ними нужна определённая аккуратность.

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

          Читать дальше →
        • Неопределённое поведение и правда не определено

          • Translation
          Термином «неопределённое поведение» в языке C и C++ обозначают ситуацию, в которой буквально «чего только не бывает». Исторически, к неопределённому поведению относили случаи, когда прежние компиляторы для C (и архитектуры на нём) вели себя несовместимым образом, и комитет по разработке стандарта, в своей безграничной мудрости, решил ничего не решать по этому поводу (т.е. не отдавать предпочтение какой-то одной из конкурирующих реализаций). Неопределённым поведением также называли возможные ситуации, в которых стандарт, обычно столь исчерпывающий, не предписывал никакого конкретного поведения. У этого термина есть и третье значение, которое в наше время становится всё более актуальным: неопределённое поведение — это возможности для оптимизации. А разработчики на C и C++ обожают оптимизации; они настойчиво требуют, чтобы компиляторы прикладывали все усилия для ускорения работы кода.

          Данная статья была впервые опубликована на сайте Cryptography Services. Перевод публикуется с разрешения автора Томаса Порнина (Thomas Pornin).
          Читать дальше →
        • Как научить людей использовать Git

          • Translation
          • Tutorial
          По работе приходится участвовать в разных проектах, поэтому я хорошо знаю, как работают все мои коллеги. Помню, что компания начала использовать Git буквально за пару недель до моего прихода. На мониторах разработчиков кругом висели наклейки с напоминанием: сначала add, потом коммит, затем пуш.


          Они не знали, зачем. Программистам просто сказали строго следовать инструкции, иначе беда. Но проблемы возникали так часто, что я решила провести семинар по Git.
          Читать дальше →
        • Полупроводниковая электроника

          • Tutorial


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



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





          Иллюстраций: 34, символов: 51 609.



          Читать дальше →
        • Биполярные транзисторы. For dummies

            Предисловие


            Поскольку тема транзисторов весьма и весьма обширна, то посвященных им статей будет две: отдельно о биполярных и отдельно о полевых транзисторах.

            Транзистор, как и диод, основан на явлении p-n перехода. Желающие могут освежить в памяти физику протекающих в нем процессов здесь или здесь.

            Необходимые пояснения даны, переходим к сути.
            Читать дальше →
          • Использование камеры Fish eye на Raspberry Pi 3 с ROS — часть 1

              Добрый день уважаемые читатели Хабра. Несколько лет назад я писал об использовании камеры Raspberry Pi Camera Board на Raspberry Pi в связке с ROS. В этой и следующей статьях я бы хотел рассказать об использовании широкоугольной камеры типа fish eye на Raspberry Pi 3 с установленной Ubuntu 16.04. Кому интересно прошу под кат.
              Читать дальше →
              • +7
              • 12.3k
              • 8
            • Принцип наименьшего действия в аналитической механике

              • Tutorial

              Предыстория




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

              Задача о движении шарика

              Не все так просто


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

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

              image

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

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

              Так в чем же, с моей точки зрения, проблема?
              Читать дальше →
            • Основы электробезопасности при проектировании электронных устройств

                Привет, Хабр!

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


                Тема это большая и сложная, но я постараюсь выделить основные моменты — не в последнюю очередь на основании ошибок, которые я видел во всевозможных реальных устройствах и проектах, в том числе публиковавшихся на Хабре. Я не буду долго и нудно перечислять ГОСТы, но перечислю совсем базовые вещи, которые необходимо понимать и соблюдать, чтобы не убить хотя бы себя (если вы планируете не убивать также и окружающих, то после завершения этой статьи не поленитесь пролистать и релевантные ГОСТы).

                Итак, вы собрались делать устройство, которое как минимум одним своим концом включается в розетку.
                Читать дальше →
              • Почти все, что вы хотели знать про плавающую точку в ARM, но боялись спросить

                  Привет, Хабр! В этой статье я хочу рассказать про работу с плавающей точкой для процессоров с архитектурой ARM. Думаю, эта статья будет полезна прежде всего тем, кто портирует свою ОС на ARM-архитектуру и при этом им нужна поддержка аппаратной плавающей точки (что мы и делали для Embox, в котором до этого использовалась программная реализация операций с плавающей точкой).

                  Итак, приступим.
                  Читать дальше →
                • Как настроить Bluetooth в Linux сложным путем


                  Готовясь на работе к ежегодному форуму посвященному IT, возникла идея создать простой манипулятор управляемый беспроводным геймпадом для демонстрации возможностей микроконтроллеров и одноплатных компьютеров. Под рукой был контроллер ТРИК, несколько сервомоторов, железный конструктор и месяц до начала форума.


                  «Все идет по плану», но не в этом случае.

                  Читать дальше →
                • Инверсная кинематика в двухмерном пространстве

                  • Translation

                  Часть 1. Математика



                  Введение


                  Мы так привыкли к взаимодействию с окружающим нас миром, что не задумываемся о том, насколько сложно двигаются наши руки и ноги. В академической литературе задача управления манипулятором робота называется инверсной кинематикой. Кинематика обозначает "движения", а понятие "инверсная" связано с тем, что обычно мы не управляем самой рукой. Мы управляем «двигателями», поворачивающими каждую отдельную часть. Инверсная кинематика — это задача определения того, как перемещать эти двигатели, чтобы сдвинуть руку в конкретную точку. И в своём общем виде эта задача чрезвычайно сложна. Чтобы вы понимали, насколько она сложна, то можете вспомнить о таких играх, как QWOP, GIRP или даже Lunar Lander, в которой вы выбираете не куда двигаться, а какие мускулы (или ускорители) приводить в действие.

                  Задача управления подвижными приводами распостраняется даже на область робототехники. Вас не должно удивлять то, что на протяжении веков математики и инженеры смогли разработать множество решений. В большинстве 3D-редакторов и игровых движков (в том числе и в Unity) есть наборы инструментов, позволяющих выполнять риггинг человекоподобных и звероподобных существ. Для различных схем (манипуляторов роботов, хвостов, щупалец, крыльев и т.д.) встроенных решений обычно не существует.
                  Читать дальше →
                  • +36
                  • 13.2k
                  • 3