Pull to refresh
10
0
Борзенко Денис @bBars

User

Send message

Зачем Программисту Микроконтроллеров Линейная Алгебра (или Как Найти Угол Между Векторами?)

Level of difficultyEasy
Reading time7 min
Views11K

В программировании микроконтроллеров часто возникает задача найти угол между векторами.

Это всяческие встраиваемые системы, где есть подвижные, вращающиеся детали: PTZ камеры, поворотные платформы для радаров, турели, ветрогенераторы, солнечные панели, SDR обработка и прочее.

В данном тексте я приведу простое и понятное решение задачи вычисления угла между векторами на языке программирования Си.

Читать далее
Total votes 20: ↑19.5 and ↓0.5+19
Comments105

Программирование устройств на основе модуля ESP32

Reading time26 min
Views181K
Микроконтроллер — это интегральная схема, способная выполнять программы. Сегодня на рынке представлено множество таких моделей от самых разных производителей. Цены на эти устройства продолжают падать. Однокристальные чипы находят широкое применение в самых разнообразных сферах: от измерительных приборов до изделий развлечений и всевозможной домашней техники. В отличие от персональных компьютеров микроконтроллер сочетает в одном кристалле функции процессора и периферийных устройств, содержит оперативную память и постоянное запоминающее устройство в для хранения кода и данных, однако обладает значительно мешьшими вычислительными ресурсами. ESP32 — это микроконтроллер, разработанный компанией Espressif Systems. ESP32 представляет собой систему на кристалле с интегрированным Wi-Fi и Bluetooth контроллерами. В серии ESP32 используется ядро Tensilica Xtensa LX6. Платы с ESP32 обладают хорошей вычислительной способностью, развитой периферией и при этом весьма популярны ввиду низкой цены в диапазоне 7$ – 14$: Aliexpress, Amazon.

image
Читать дальше →
Total votes 32: ↑30 and ↓2+28
Comments5

Как работает радио?

Level of difficultyMedium
Reading time8 min
Views16K

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

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


Если вы подзабыли какие-то из этих тем, то рекомендую сначала освежить память.
Читать дальше →
Total votes 64: ↑64.5 and ↓-0.5+65
Comments51

Как успешно пройти собеседование на Technical Product Manager в Тинькофф? Личный опыт

Level of difficultyEasy
Reading time7 min
Views8.4K

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

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

Читать далее
Total votes 16: ↑14 and ↓2+12
Comments24

Время — это не просто ещё одно измерение

Level of difficultyMedium
Reading time8 min
Views88K

Большинство из нас хоть раз в жизни задавались вопросом: «Каково кратчайшее расстояние между двумя точками?». По умолчанию многие дадут тот же ответ, что и Архимед более 2 000 лет назад: прямая линия. Если вы возьмёте плоский лист бумаги и поставите на нём две точки в любом месте, вы сможете соединить эти две точки любой линией, кривой или геометрической траекторией, которую только можно себе представить. До тех пор пока бумага остаётся плоской и никак не изогнутой, прямая линия, соединяющая эти две точки, будет самым коротким путём между ними.

Именно так работают три измерения пространства в нашей Вселенной: в плоском пространстве кратчайшее расстояние между любыми двумя точками — это прямая линия. Это верно независимо от того, как вы вращаете, ориентируете или иным образом располагаете эти две точки. Но наша Вселенная состоит не только из трёх пространственных измерений – она содержит четыре измерения, пространство и время. Легко взглянуть на это и сказать: «О, ну три из них — пространство, а одно — время, вот мы и получаем пространство-время», — и это правда, но это не вся история. В конце концов, кратчайшее расстояние между двумя событиями в пространстве-времени уже не является прямой линией. И вот, что говорит об этом наука.

Читать далее
Total votes 66: ↑61 and ↓5+56
Comments400

Как шутят математики. Шифры Фейнмана

Reading time8 min
Views13K

Ранее я писал о взломе первого и второго шифра, придуманных математиком Полом Оламом ради розыгрыша своего друга Ричарда Фейнмана. Если описать контекст в нескольких словах, то эти шифры были одной из математических шуток, которые были в широком ходу у коллектива учёных, работавших на «продуктовой» базе в Лос‑Аламосе над созданием той самой «ядрёной» бомбы. Также я упоминал о трёх других шифрах, авторство которых до сих пор достоверно неизвестно и вряд ли выяснится. Их называют шифрами Фейнмана, и до середины прошлого года два из них оставались нераскрытыми, о чём я также писал ранее. Так вот, в мае прошлого года это всё‑таки свершилось и они были вскрыты. В этой статье я расскажу как.

Само собой разумеется, что работал с этими шифрами не я, но и мне здорово пришлось поломать голову, как это всё рассказать. Пришлось пройти весь путь и кое‑что допилить, чтобы результат стал доступен как можно большему количеству людей на той части земной поверхности, которую со времён господина Стрельбицкого было принято называть «одной шестой». Автор взлома — Дэйв Вьера (David Vierra).

Читать далее
Total votes 17: ↑17 and ↓0+17
Comments11

Самое понятное объяснение Специальной теории относительности

Level of difficultyMedium
Reading time13 min
Views98K

Специальная теория относительности - удивительная теория, которая опровергла многие представления о мире, в которых человечество не сомневалось всю историю своего существования.

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

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

Для иллюстраций я написал интерактивный визуализатор СТО, работающий в браузере. Ссылка на него и исходники проекта в конце статьи.

Читать далее
Total votes 386: ↑386 and ↓0+386
Comments388

Реализация алгоритма Минимакс на примере игры «Крестики-Нолики»

Reading time7 min
Views30K
Недавно я написал непобедимую игру «Крестики-Нолики». Это был интересный и поучительный проект, который многому меня научил. Если у вас есть желание посмотреть результат — это можно сделать здесь.

image

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

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

Читать дальше →
Total votes 9: ↑8 and ↓1+7
Comments6

Алгоритм Monte Carlo Tree Search простыми словами

Reading time11 min
Views10K

Можно ли научить ИИ играть в настольную игру и выигрывать в ней, если мы сами не знаем как это сделать? Да! И один из способов — использовать алгоритм Monte Carlo Tree Search (MCTS). Он актуален даже сейчас, в эпоху развития нейронных сетей.

У многих людей, в том числе и у меня, поначалу были сложности с пониманием алгоритма, как и с верой в то, что он может хорошо играть. В этой статье хочу рассказать об MCTS максимально просто и помочь разобраться в нем новичкам. В первой главе расскажу об основах, с которыми многие могут быть уже знакомы. Однако считаю, что они действительно важны для понимания. Подробности под катом!
Читать дальше →
Total votes 40: ↑40 and ↓0+40
Comments2

Microk8s, еще один легковесный K8s

Level of difficultyEasy
Reading time6 min
Views7.6K

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

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

MicroK8s - отличный способ запустить и ознакомиться с Kubernetes. Это полностью совместимый, легковесный пакет Kubernetes, который работает на 42 видах Linux и идеально подходит для:

Читать далее
Total votes 12: ↑10 and ↓2+8
Comments7

Генератор случайных чисел, который можно запустить в голове

Level of difficultyHard
Reading time8 min
Views25K

Люди ужасно плохо справляются с придумыванием случайных чисел. Я хотел научиться быстро генерировать «достаточно случайные» числа. Мне не нужно было что-то совершенное, просто способ придумывания случайных цифр за полминуты. Поискав онлайн, я нашёл старый пост в 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, языке для гремлинов. На случай, если вы тоже гремлин, под спойлерами я буду объяснять все странные особенности.
Читать дальше →
Total votes 68: ↑65 and ↓3+62
Comments18

USB MIDI-контроллер на Arduino

Reading time4 min
Views100K
image

В очередной раз играя на гитаре и управляя звуком через Peavey ReValver и прочие Amplitube, задумался о приобретении MIDI-контроллера. Фирменные устройства, вроде Guitar Rig Kontrol 3, стоят около 13 000 рублей, и обладают только напольным исполнением. То есть оперативно менять положения нескольких регуляторов весьма проблематично.

Различные контроллеры DJ направленности выглядели интереснее за счет обилия фейдеров и энкодеров. Решено было совместить приятное с полезным и сделать MIDI-контроллер самому.
Читать дальше →
Total votes 38: ↑37 and ↓1+36
Comments49

Закон больших чисел и закон больших грабель

Level of difficultyEasy
Reading time9 min
Views11K

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

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

Бросать не будем, все брошено до нас
Total votes 45: ↑45 and ↓0+45
Comments35

Принципы SOLID на JS, теперь точно простым языком, но не очень коротко

Reading time9 min
Views28K

SOLID — универсальный набор принципов разработки поддерживаемого программного обеспечения. В данной статье я попытался разъяснить свое понимание принципов SOLID в отношении языка JavaScript: особенности реализации, некоторые синтаксические конструкции и, конечно, примеры из жизни. Если вам стало интересно, то прошу под кат.

Читать далее
Total votes 15: ↑10 and ↓5+5
Comments10

2d движок для игр Javascript Game Engine (JsGE)

Level of difficultyMedium
Reading time7 min
Views6.7K

Привет всем. Меня зовут Артурас, я пишу на Javascript. Полтора года назад я уволился из оффшорной компании и решил написать свой движок для браузерных 2d игр. Сегодня - делюсь результатами.

Читать далее
Total votes 11: ↑11 and ↓0+11
Comments15

Моя любимая задача для собеседований по программированию

Level of difficultyMedium
Reading time9 min
Views97K

В сети есть уйма постов и видео, где разбираются ответы на вопросы LeetCode. Но обычно рассмотрение в них происходит с позиции соискателя, а не работодателя. В этой же статье я приведу разбор собственной задачи по программированию, которую использовал при приёме людей на работу в Amazon, Google и Microsoft.
Читать дальше →
Total votes 131: ↑126 and ↓5+121
Comments170

Простой ORM для sqlite3

Level of difficultyMedium
Reading time12 min
Views12K

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

Не бывало ли вам интересно, как работает изнутри такая идейно простая концепция? Благодаря чему достигается удобство работы? Сегодня мы напишем ORM самостоятельно и узнаем, какие инструменты python нам для этого понадобятся.
Читать дальше →
Total votes 50: ↑49 and ↓1+48
Comments26

ГЕОМЕТРИЯ ЗВУКА

Reading time5 min
Views10K

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

[Читать на английском]

Читать дальше...
Total votes 34: ↑34 and ↓0+34
Comments64

Осваиваем модуляризацию: Руководство для начинающих по организации сложных программных систем

Reading time6 min
Views2.4K

⚡ Tl;dr


  • Модуляризация — это метод разделения сложных систем на более мелкие удобоваримые части для лучшего управления и восприятия.
  • Она повышает эффективность, надежность и ремонтопригодность программных проектов за счет организации кода в модули.
  • Она снижает когнитивную нагрузку на разработчиков за счет уменьшения объема информации, которую им приходится обрабатывать за один раз, что облегчает понимание сложных систем и предотвращает их «выгорание».
  • Модули при разработке программного обеспечения можно рассматривать как строительные кубики, наподобие деталей «Лего».
  • Каждый модуль имеет уникальный набор общедоступных интерфейсов, структур данных или сообщений, которые служат контрактами для других разработчиков.
  • При работе с модулями важно относиться к ним как к «черным ящикам» и взаимодействовать с ними только через определенные общедоступные интерфейсы, чтобы избежать сильного связывания и повысить модульность системы.
  • Сборки используются для группировки кода в .NET, поскольку они обеспечивают более высокий уровень инкапсуляции (использование внутреннего доступа). Это позволяет разработчикам контролировать уровень доступа другого кода к членам типа и помогает защитить детали реализации типа или элемента.
  • Чтобы сделать реализацию прозрачной для тестирования, можно использовать атрибут в файле csproj и указать имя сборки тестового проекта.
Читать дальше →
Total votes 7: ↑6 and ↓1+5
Comments3

Почему существует только 5 правильных многогранников? Ответ даёт неравенство из 8-го класса

Level of difficultyEasy
Reading time4 min
Views28K

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

В новой статье мы узнаем, каким образом Платон, Евклид и Кеплер приоткрыли завесу над этой великой загадкой природы и поймем, почему все попытки построить шестое платоново тело обречены на провал.

Читать далее
Total votes 41: ↑37 and ↓4+33
Comments13
1

Information

Rating
5,052-nd
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Registered
Activity