В программировании микроконтроллеров часто возникает задача найти угол между векторами.
Это всяческие встраиваемые системы, где есть подвижные, вращающиеся детали: PTZ камеры, поворотные платформы для радаров, турели, ветрогенераторы, солнечные панели, SDR обработка и прочее.
В данном тексте я приведу простое и понятное решение задачи вычисления угла между векторами на языке программирования Си.
User
Программирование устройств на основе модуля ESP32
Как работает радио?
Радиокоммуникации играют ключевую роль в современной электронике, но их теорию сложно понять начинающему любителю. Да, у нас есть общее представление: мы знаем о частотах и, вероятно, можем объяснить разницу между амплитудной и частотной модуляциями. Однако большинству из нас сложно сформулировать, как создать качественную антенну или как приёмник может настраиваться на конкретную частоту, игнорируя все остальные.
В этой статье я постараюсь изложить введение в радио без использования жаргона радиолюбителей и сложной математики. Для этого я воспользуюсь концепциями, рассмотренными в четырёх предыдущих статьях моего блога:
- Базовые концепции электронных цепей
- Электромагнитные поля и хранение энергии
- Задержки распространения сигналов и отражения сигналов
- Анализ диапазона частот при помощи дискретного преобразования Фурье и дискретного косинусного преобразования
Если вы подзабыли какие-то из этих тем, то рекомендую сначала освежить память.
Как успешно пройти собеседование на Technical Product Manager в Тинькофф? Личный опыт
Всем привет, меня зовут Виктор и на днях я выхожу в Тинькофф на позицию тех-продакта в Платформу базовых мобильных технологий.
Во время подготовки к собеседованиям мне очень помогла статья на Хабре, однако там речь шла о позиции QA. Поэтому в этой статье я хочу рассказать о личном опыте прохождения всех этапов собеседования на Технического Продакта, а также дать пару советов, как повысить свои шансы на успех.
Время — это не просто ещё одно измерение
Большинство из нас хоть раз в жизни задавались вопросом: «Каково кратчайшее расстояние между двумя точками?». По умолчанию многие дадут тот же ответ, что и Архимед более 2 000 лет назад: прямая линия. Если вы возьмёте плоский лист бумаги и поставите на нём две точки в любом месте, вы сможете соединить эти две точки любой линией, кривой или геометрической траекторией, которую только можно себе представить. До тех пор пока бумага остаётся плоской и никак не изогнутой, прямая линия, соединяющая эти две точки, будет самым коротким путём между ними.
Именно так работают три измерения пространства в нашей Вселенной: в плоском пространстве кратчайшее расстояние между любыми двумя точками — это прямая линия. Это верно независимо от того, как вы вращаете, ориентируете или иным образом располагаете эти две точки. Но наша Вселенная состоит не только из трёх пространственных измерений – она содержит четыре измерения, пространство и время. Легко взглянуть на это и сказать: «О, ну три из них — пространство, а одно — время, вот мы и получаем пространство-время», — и это правда, но это не вся история. В конце концов, кратчайшее расстояние между двумя событиями в пространстве-времени уже не является прямой линией. И вот, что говорит об этом наука.
Как шутят математики. Шифры Фейнмана
Ранее я писал о взломе первого и второго шифра, придуманных математиком Полом Оламом ради розыгрыша своего друга Ричарда Фейнмана. Если описать контекст в нескольких словах, то эти шифры были одной из математических шуток, которые были в широком ходу у коллектива учёных, работавших на «продуктовой» базе в Лос‑Аламосе над созданием той самой «ядрёной» бомбы. Также я упоминал о трёх других шифрах, авторство которых до сих пор достоверно неизвестно и вряд ли выяснится. Их называют шифрами Фейнмана, и до середины прошлого года два из них оставались нераскрытыми, о чём я также писал ранее. Так вот, в мае прошлого года это всё‑таки свершилось и они были вскрыты. В этой статье я расскажу как.
Само собой разумеется, что работал с этими шифрами не я, но и мне здорово пришлось поломать голову, как это всё рассказать. Пришлось пройти весь путь и кое‑что допилить, чтобы результат стал доступен как можно большему количеству людей на той части земной поверхности, которую со времён господина Стрельбицкого было принято называть «одной шестой». Автор взлома — Дэйв Вьера (David Vierra).
Самое понятное объяснение Специальной теории относительности
Специальная теория относительности - удивительная теория, которая опровергла многие представления о мире, в которых человечество не сомневалось всю историю своего существования.
Многие слышали про волшебства вроде замедления времени, сокращения длины, относительности одновременности, парадокса близнецов и т.д., но мало кто понимает почему так происходит.
В этой статье я хочу наглядно показать, что все это проще, чем кажется на первый взгляд.
Для иллюстраций я написал интерактивный визуализатор СТО, работающий в браузере. Ссылка на него и исходники проекта в конце статьи.
Реализация алгоритма Минимакс на примере игры «Крестики-Нолики»
Для того чтобы сделать игру непобедимой, было необходимо создать алгоритм, который может рассчитать все возможные ходы для «компьютерного» игрока. Далее, нужно использовать некоторую метрику, чтобы определить, какой ход является предпочтительным. После долгих исследований стало понятно, что алгоритм Минимакс, был тем, что мне нужно.
Понимание основ алгоритма и реализация игры заняли некоторое время. Я нашел много примеров кода и объяснений, тем не менее это оказалось не такой уж простой затеей. Надеюсь этот пост поможет некоторым из читателей оценить элегантность этого алгоритма.
Алгоритм Monte Carlo Tree Search простыми словами
Можно ли научить ИИ играть в настольную игру и выигрывать в ней, если мы сами не знаем как это сделать? Да! И один из способов — использовать алгоритм Monte Carlo Tree Search (MCTS). Он актуален даже сейчас, в эпоху развития нейронных сетей.
У многих людей, в том числе и у меня, поначалу были сложности с пониманием алгоритма, как и с верой в то, что он может хорошо играть. В этой статье хочу рассказать об MCTS максимально просто и помочь разобраться в нем новичкам. В первой главе расскажу об основах, с которыми многие могут быть уже знакомы. Однако считаю, что они действительно важны для понимания. Подробности под катом!
Microk8s, еще один легковесный K8s
В современном мире разработки и развертывания приложений, контейнеризация стала ключевым элементом для обеспечения масштабируемости, гибкости и надежности. В этом контексте технология Kubernetes, как ведущая платформа оркестрации контейнеров, становится неотъемлемым инструментом для управления и развертывания многокомпонентных приложений.
Microk8s предоставляет собой легковесное решение для установки и управления Kubernetes-кластером на локальной машине или в облаке, делая процесс эксплуатации контейнеризированных приложений доступным для широкого круга разработчиков и системных администраторов. В этой статье мы рассмотрим основные шаги быстрого старта с Microk8s, от установки до первого развертывания приложения, чтобы обеспечить эффективное использование Kubernetes в ваших проектах.
MicroK8s - отличный способ запустить и ознакомиться с Kubernetes. Это полностью совместимый, легковесный пакет Kubernetes, который работает на 42 видах Linux и идеально подходит для:
Генератор случайных чисел, который можно запустить в голове
Люди ужасно плохо справляются с придумыванием случайных чисел. Я хотел научиться быстро генерировать «достаточно случайные» числа. Мне не нужно было что-то совершенное, просто способ придумывания случайных цифр за полминуты. Поискав онлайн, я нашёл старый пост в Usenet, написанный Джорджем Марсалья:
Выберите двухразрядное число, допустим, 23. Оно будет вашим «порождающим значением» (seed).
Создайте новое двухразрядное число: количество десяток плюс шесть, умноженное на количество единиц.
Пример последовательности: 23 –> (2 + 6 * 3) = 20 –> (2 + 6 * 0) = 02 –> 12 –> 13 –> 19 –> 55 –> 35 –> …
Его период будет порядком множителя (6) в группе остатков, простых относительно модуля, 10 (в данном случае 59).
«Случайными цифрами» будет количество единиц двухразрядных чисел, то есть 3,0,2,2,3,9,5,… то есть члены последовательности mod 10.
Больше всего Марсалья известен своим набором тестов diehard-генераторов случайных чисел (RNG), так что он в этом понимает (здесь и далее под RNG я имею в виду генератор псевдослучайных чисел (PRNG)). Мне стало любопытно, почему это работает и как он выбрал 6.
Мы будем писать на Raku, языке для гремлинов. На случай, если вы тоже гремлин, под спойлерами я буду объяснять все странные особенности.
USB MIDI-контроллер на Arduino
В очередной раз играя на гитаре и управляя звуком через Peavey ReValver и прочие Amplitube, задумался о приобретении MIDI-контроллера. Фирменные устройства, вроде Guitar Rig Kontrol 3, стоят около 13 000 рублей, и обладают только напольным исполнением. То есть оперативно менять положения нескольких регуляторов весьма проблематично.
Различные контроллеры DJ направленности выглядели интереснее за счет обилия фейдеров и энкодеров. Решено было совместить приятное с полезным и сделать MIDI-контроллер самому.
Закон больших чисел и закон больших грабель
Бросание монеты - дело не хитрое да и оборудование для экспериментов не очень дорогое. Бросай себе и бросай. Этот простой эксперимент дает неожиданно много следствий, многие из которых не очевидны, а порой и контринтуитивны.
Моя интуиция с завидным постоянством подсказывает мне неверное решение поэтому я собрал замечательную коллекцию грабель на которые я наступал и хотел бы ее показать публике. Я не буду использовать формул и законы больших чисел, эти столпы теорвера нам не понадобятся. Обойдемся только граблями их будет много и разных.
Принципы SOLID на JS, теперь точно простым языком, но не очень коротко
SOLID — универсальный набор принципов разработки поддерживаемого программного обеспечения. В данной статье я попытался разъяснить свое понимание принципов SOLID в отношении языка JavaScript: особенности реализации, некоторые синтаксические конструкции и, конечно, примеры из жизни. Если вам стало интересно, то прошу под кат.
2d движок для игр Javascript Game Engine (JsGE)
Привет всем. Меня зовут Артурас, я пишу на Javascript. Полтора года назад я уволился из оффшорной компании и решил написать свой движок для браузерных 2d игр. Сегодня - делюсь результатами.
Моя любимая задача для собеседований по программированию
В сети есть уйма постов и видео, где разбираются ответы на вопросы LeetCode. Но обычно рассмотрение в них происходит с позиции соискателя, а не работодателя. В этой же статье я приведу разбор собственной задачи по программированию, которую использовал при приёме людей на работу в Amazon, Google и Microsoft.
Простой ORM для sqlite3
ORM, или объектно-реляционное отображение — это программная технология, которая позволяет взаимодействовать с базами данных с использованием объектно-ориентированной парадигмы. Вместо того чтобы писать SQL-запросы напрямую для работы с данными в базе данных, можно использовать ORM, чтобы взаимодействовать с данными, как если бы они были объектами в вашем коде.
Не бывало ли вам интересно, как работает изнутри такая идейно простая концепция? Благодаря чему достигается удобство работы? Сегодня мы напишем ORM самостоятельно и узнаем, какие инструменты python нам для этого понадобятся.
ГЕОМЕТРИЯ ЗВУКА
Удивительно, но существуют строгие математические методы, которые в буквальном смысле позволяют услышать визуальные геометрические формы и наоборот узреть красоту музыкальных гармоний...
Осваиваем модуляризацию: Руководство для начинающих по организации сложных программных систем
⚡ Tl;dr
- Модуляризация — это метод разделения сложных систем на более мелкие удобоваримые части для лучшего управления и восприятия.
- Она повышает эффективность, надежность и ремонтопригодность программных проектов за счет организации кода в модули.
- Она снижает когнитивную нагрузку на разработчиков за счет уменьшения объема информации, которую им приходится обрабатывать за один раз, что облегчает понимание сложных систем и предотвращает их «выгорание».
- Модули при разработке программного обеспечения можно рассматривать как строительные кубики, наподобие деталей «Лего».
- Каждый модуль имеет уникальный набор общедоступных интерфейсов, структур данных или сообщений, которые служат контрактами для других разработчиков.
- При работе с модулями важно относиться к ним как к «черным ящикам» и взаимодействовать с ними только через определенные общедоступные интерфейсы, чтобы избежать сильного связывания и повысить модульность системы.
- Сборки используются для группировки кода в .NET, поскольку они обеспечивают более высокий уровень инкапсуляции (использование внутреннего доступа). Это позволяет разработчикам контролировать уровень доступа другого кода к членам типа и помогает защитить детали реализации типа или элемента.
- Чтобы сделать реализацию прозрачной для тестирования, можно использовать атрибут в файле csproj и указать имя сборки тестового проекта.
Почему существует только 5 правильных многогранников? Ответ даёт неравенство из 8-го класса
Вы когда-нибудь задумывались, почему в природе встречаются кристаллы лишь пяти типов правильных многогранников? Почему не бывает, скажем, правильных семиугольных кристаллов? Ответ кроется в удивительных свойствах платоновых тел - пяти идеальных многогранников, впервые описанных еще в древности.
В новой статье мы узнаем, каким образом Платон, Евклид и Кеплер приоткрыли завесу над этой великой загадкой природы и поймем, почему все попытки построить шестое платоново тело обречены на провал.
Information
- Rating
- 5,052-nd
- Location
- Санкт-Петербург, Санкт-Петербург и область, Россия
- Registered
- Activity