Как стать автором
Обновить
4
Карма
0
Рейтинг

Пользователь

  • Подписчики
  • Подписки 5
  • Публикации
  • Комментарии

С помощью Python создаём математические анимации, как на канале 3Blue1Brown

Блог компании SkillFactory Python *Программирование *Математика *Визуализация данных
Перевод
Tutorial

Вы наверняка когда-то испытывали трудности в понимании математических концепций алгоритмов машинного обучения и для лучшего понимания темы пользовались обучающим ресурсом 3Blue1Brown. 3Blue1Brown — известный математический YouTube-канал, который ведёт Грант Сандерсон. Многим нравится 3Blue1Brown за прекрасные объяснения Гранта и великолепные анимации.

21 мая стартует новый поток курса о математике для Data Science. Специально к его запуску мы делимся переводом, в котором автор решил рассказать, как делать анимации, подобные анимациям на канале 3Blue1Brown, чтобы вы могли иллюстрировать свои идеи и рассуждения о математике и не только.

Читать далее
Всего голосов 42: ↑42 и ↓0 +42
Просмотры 12K
Комментарии 1

Кручу-верчу, запутать хочу: углы Эйлера и Gimbal lock

Разработка игр *Алгоритмы *Unity *


Выставите любой палец левой руки вперед. Давайте, не стесняйтесь, никто не будет над вами смеяться. Это нужно для важного эксперимента. Выставили? Теперь представьте что вы — это ваш палец (ну и бред). Повернитесь под прямым углом направо, затем наверх, и наконец налево. Где вы оказались? Правильно, в том же месте, но уже на спине.

С некоторой натяжкой именно так работает вращение с помощью углов Эйлера. Немного непредсказуемо и неудобно, не правда ли? Углы Эйлера имеют несколько недостатков, но есть одно особенно нехорошее свойство из-за которого вы не захотите с ними связываться. Его имя — Gimbal lock.

В русском языке gimbal lock называют по-разному: шарнирный замок, блокировка осей, складывание рамок. К сожалению, по запросам в поисковике с такими ключевыми словами выдаётся много мусора, а статья в Википедии оставляет желать лучшего, поэтому я сам расскажу вам об этом феномене и предложу как с ним бороться.

Внимание! Заходя под кат вы подвергаетесь риску поломать голову.
Ха! Я ничего не боюсь! Где этот gimbal lock?
Всего голосов 67: ↑60 и ↓7 +53
Просмотры 110K
Комментарии 37

Аэродинамика из STL

JavaScript *Научно-популярное Космонавтика Физика

Для построения траекторий КА и их носителей нужны данные. В первую очередь - аэродинамические. Они нужны при определении сил и моментов, действующих на космический аппарат (или его ступень), а также для оценки теплового состояния конструкции. Характеристики зависят от внешнего вида КА и параметров полета и обычно выглядят как обширные простыни с зависимостями соответствующих коэффициентов от углов атаки, чисел Маха, высот и много еще чего.

Есть несколько способов получить эти цифры:

Читать далее
Всего голосов 16: ↑16 и ↓0 +16
Просмотры 4.6K
Комментарии 16

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

Блог компании SkillFactory Python *Программирование *Обработка изображений *Лайфхаки для гиков
Перевод
Tutorial

Те, кто знает Python, могут делать поистине удивительные вещи, например, создавать арт-объекты и игры и красивые карты, полнотекстовую поисковую машину и систему распознавания лиц. Применим Python и для вполне бытовых задач. Сегодня, специально к старту новых потоков курсов Python для веб-разработки и Fullstack-разработчик на Python поделимся с вами туториалом, как считывать, добавлять и удалять EXIF метаданные из фотографий с помощью Python.

Читать далее
Всего голосов 8: ↑8 и ↓0 +8
Просмотры 8.5K
Комментарии 4

Кастомные QSettings::ReadFunc и QSettings::WriteFunc, или как я написал костыль для русификации файла настроек

C++ *Qt *
Из песочницы

Введение


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

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

Проблема


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

Так как параметры разделены на группы по модулям устройства, то в конечном варианте получается структура «Группа — Ключ — Значение». Подходящим (но предназначенным по задумке для данной задачи) стал QSettings. Первая проба «пера» дала фиаско, с которым я не ожидал столкнуться.

Параметры выводятся в программе пользователю на русском языке, поэтому хранить их хотелось бы в таком же виде (чтобы люди слабо знакомые с английским могли просмотреть содержимое файла).
Читать дальше →
Всего голосов 8: ↑8 и ↓0 +8
Просмотры 1.9K
Комментарии 8

QSerializer умер, да здравствует QSerializer

Программирование *C++ *XML *Qt *
Прошло несколько месяцев с тех пор, как я здесь рассказал о своем проекте Qt-based библиотеки для сериализации данных из объектного вида в JSON/XML и обратно. Надо признать — реализация получилась, прямо скажем, спорной.

Все это вылилось в масштабную переработку, о результатах которой пойдет речь в этой статье. За подробностями — под кат!


Читать дальше →
Всего голосов 7: ↑6 и ↓1 +5
Просмотры 2.3K
Комментарии 0

Прощаемся с кометой NEOWISE

Научно-популярное Астрономия
Комета C/2020 F3 (NEOWISE) тускнеет — она все дальше от Солнца, район максимального сближения с Землей тоже позади, и последние измерения дают ее яркость на грани видимого глазом. Что ж, пора прощаться и вспомнить яркие кадры, которые нам подарила пока что самая яркая комета 21 века в северном полушарии.


Вид с МКС, фото NASA
Всего голосов 43: ↑43 и ↓0 +43
Просмотры 8.1K
Комментарии 22

Любовь, смерть, роботы и Пелевин

Научная фантастика
image

В прошлом году, вернувшись с тренировки, я засел перед компьютером, чтоб посмотреть пару забавных мемов про котиков. И, обнаружив новость о выходе нового сериала Любовь, смерть и роботы– «Love, Death & Robots», я лениво потрогал её мышкой — глянуть одним глазком.

Пришел в себя я под утро. С красными глазами, затекшим, от сидения в кресле телом — но совершенно счастливым.

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

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

«Я сниму свой сериал! — сказал я, чтоб справиться с завистью, — точнее, соберу 18 рассказов, ничуть не уступающих подборке сериала».
Читать дальше →
Всего голосов 66: ↑55 и ↓11 +44
Просмотры 67K
Комментарии 56

Портирование приложений с QWidget на QML под Desktop

Qt *Разработка под Linux *Разработка под Windows *
Привет, Хабровчане!

Последнее время часто встречаю проекты для desktop, которые необходимо портировать с QWidget на QML. Кто-то хочет написать с нуля, кто-то перенести старые наработки. В любом из сценариев это популяризация QML, чему я очень рад. Я решил тоже побыть полезным и поделиться своими наработками и ситуациями из личной практики. Возможно, некоторые из них покажутся вам простыми и понятными, однако если я что-то упустил, буду рад почитать об этом в комментариях.
Читать дальше →
Всего голосов 12: ↑11 и ↓1 +10
Просмотры 3.1K
Комментарии 13

Запускаем камеру от телефона, или что делать, когда ничего не получается?

Разработка робототехники *Программирование микроконтроллеров *Схемотехника *Производство и разработка электроники *DIY или Сделай сам


Лет восемь назад работал я в одном… а в прочем, не важно где. Делали мы там всякие разные интересные вещи. В том числе занимались системами технического зрения для роботов. Роботы были немного маленькие. И если привод для них маленький сделать не было для нас особой проблемой, то вот сделать миниатюрную цифровую камеру, которая не была бы размером с половину робота, было трудно (когда же мы наконец похороним PAL в таких разработках и везде будет цифра?). Если вам любопытно узнать, чем же всё закончилось, прошу под кат!

Читать дальше →
Всего голосов 103: ↑102 и ↓1 +101
Просмотры 67K
Комментарии 48

Android Camera2 API от чайника, часть 6, финальная Стрим видео — сначала кодировали, теперь декодируем

Программирование *Java *Разработка под Android *Google API *DIY или Сделай сам
🔥 Технотекст 2020
Tutorial

Итак, в предыдущем посте мы занимались кодированием «живого» видео формата H.264 на Android устройстве, которое затем отправляли для просмотра на персональный компьютер под виндой. Там наш видеопоток успешно раскодировывался и лицезрелся с помощью VLC плеера. А так же с помощью библиотеки VLCJ CAPRICA благополучно впихивался и в окошки JAVA приложения. Правда, каким именно образом он (VLC плеер) всё это проделывал, так и осталось загадкой. Но с другой стороны — работает, да и ладно.

Подстольный настольный компьютер, ноутбук, лэптоп — всё это прекрасно, но тем не менее, всё больше народа смотрит видео и управляет разными девайсами не из-за стола, а чаще валяясь на диване, со смартфоном в руках. И соответственно, к примеру, даже нашей роботележкой ныне удобней управлять именно оттуда. Поэтому настало время выяснить, как наш закодированный видео поток принять и отобразить на экране такого же Android устройства. Естественно, как и раньше мы проделаем всё через Camera2 API, концепцию Surface, да ещё и асинхронно!

Кому интересно — вперёд.
Читать дальше →
Всего голосов 5: ↑5 и ↓0 +5
Просмотры 3.6K
Комментарии 5

Парсинг YouTube, включая подгружаемые данные, без YouTube API

Python *
Из песочницы

Вступление


Чтобы подгрузить данные контента на ютубе, обычно используют либо Selenium, либо YouTube API. Однако везде есть свои минусы.

  1. Selenium слишком медленный для парсинга. Представьте себе парсинг плейлиста из ~1000 роликов селениумом.
  2. YouTube API, конечно, наилучший вариант, если у вас какое-то свое приложение или проект, но там требуется зарегистрировать приложение и т.д. В «пробной» версии вам нужно постоянно авторизовываться для использования апи, еще там присутствует быстро заканчиваемая квота.
  3. В нашем методе, я бы сказал, очень сложные структуры данных, выдаваемыми ютубом. Особенно нестабильно работает парсинг поиска ютуб.

Как подгружать данные на ютубе?


Для этого есть токен, который можно найти в html коде страницы. Потом в дальнейшем его используем, как параметр для запроса к ютубу, выдающему нам новый контент. Сам ютуб прогружает контент с помощью запроса, где как раз используется этот токен.
Читать дальше →
Всего голосов 17: ↑17 и ↓0 +17
Просмотры 16K
Комментарии 36

Все, что вы должны знать о std::any

Программирование *C++ *Системное программирование *
Из песочницы
Привет, Хабр! Представляем вашему вниманию перевод статьи «Everything You Need to Know About std::any from C++17» автора Bartlomiej Filipek.

image

С помощью std::optional вы можете хранить один какой-то тип. С помощью std::variant вы можете хранить несколько типов в одном объекте. И С++17 предоставляет нам еще один такой оберточный тип — std::any, который может хранить что угодно, оставаясь при этом типобезопасным.
Читать дальше →
Всего голосов 20: ↑20 и ↓0 +20
Просмотры 7.4K
Комментарии 3

Django ORM для начинающих | Оптимизируем запросы

Python *Django *


Django ORM (Object Relational Mapping) является одной из самых мощных особенностей Django. Это позволяет нам взаимодействовать с базой данных, используя код Python, а не SQL.
Based on schegel.net

Для демонстрации опишу такую модель:

from django.db import models

class Blog(models.Model):
    name = models.CharField(max_length=250)
    url = models.URLField()

    def __str__(self):
        return self.name

class Author(models.Model):
    name = models.CharField(max_length=250)

    def __str__(self):
        return self.name

class Post(models.Model):
    title = models.CharField(max_length=250)
    content = models.TextField()
    published = models.BooleanField(default=True)
    blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
    authors = models.ManyToManyField(Author, related_name="posts")
Читать дальше →
Всего голосов 18: ↑13 и ↓5 +8
Просмотры 26K
Комментарии 23

Опыт работы с фильтром Калмана на примере NMEA данных

Алгоритмы *Математика *Matlab *
Из песочницы

Цель статьи не в объяснении принципов Калмановского фильтра, а в его демонстрации на примере реальных (сырых) данных. Желающие могут модифицировать исходники и поэкспериментировать с алгоритмом, я надеюсь что моя работа поможет тем, кто столкнется с подобной задачей.


Используемые данные — c GPS-приемника в формате NMEA-0183, в часности сообщения GGA и VTG.


Фильтрация необходима по причине зашумленности GPS. Причины помех в GPS данных разные. Основные:


  • атмосферные помехи.
  • препятствия для сигнала.
  • положение орбиты GPS. Например, невысокое наклонение орбит GPS (примерно 55°) серьёзно ухудшает точность в приполярных районах Земли.

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


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


Для удобства сравнения данные требуется вывести на один график.


С фильтрацией данных и их производных прекрасно справляется фильтр Калмана.


Применение фильтра для задач автопилота и курсовертикали является «классикой».

Читать дальше →
Всего голосов 21: ↑18 и ↓3 +15
Просмотры 4K
Комментарии 5

OpenSceneGraph: Интеграция с фреймворком Qt

Программирование *Работа с 3D-графикой *Qt *Разработка игр *CGI (графика) *
Tutorial


Введение


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

Пример интеграции OSG в приложение, разработанной в QtDesigner. Этот пример будет подробно разобран ниже


С другой стороны, для ускорения разработки на C++ применяются как сторонние библиотеки, расширяющие возможности этого языка (вроде boost), так и целые фреймворки, позволяющие легко и непринужденно разрабатывать кроссплатформенные приложения широкого функционального назначения. Одним из таких фреймворков является ультра популярный Qt. Как бы не ругали Qt за его метаобъектный компилятор и прочие недостатки и неудобства, сила Qt в обширной библиотеке классов, решающей все мыслимые задачи кроссплатформенной разработки, а так же в концепции "сигналы — слоты", реализующей подсистему обмена сообщениями между классами. На сигналах и слотах основаны так же методы взаимодействия приложения с операционной системой, а так же межпроцессное взаимодействие.

И, черт возьми, было бы весьма интересно совместить две технологии: Qt и OSG. Подобную задачу пришлось решать моему коллективу, о чем я уже писал в одной из своих публикаций. Однако, этот вопрос хотелось бы раскрыть немного шире, и данная статья будет как раз на эту тему.
Всего голосов 17: ↑17 и ↓0 +17
Просмотры 4.4K
Комментарии 0

Средства консоли Chrome, которыми вы, возможно, никогда не пользовались

Блог компании RUVDS.com Разработка веб-сайтов *Браузеры Софт
Перевод
Консоль инструментов разработчика Chrome — это, вероятно, одно из самых широко используемых и самых полезных специализированных средств браузера. Консоль даёт программисту множество интересных возможностей. Она помогает в отладке, профилировании и мониторинге кода страниц.



Материал, перевод которого мы сегодня публикуем, посвящён рассказу о некоторых возможностях консоли Chrome, которые известны не так широко, как они того заслуживают.
Читать дальше →
Всего голосов 94: ↑94 и ↓0 +94
Просмотры 48K
Комментарии 27

Аппаратный ключ шифрования за 3$ — возможно ли это?

Информационная безопасность *Криптография *Программирование микроконтроллеров *DIY или Сделай сам
Из песочницы
Tutorial

Итоговый результат — ключ размером с флешку

Повсеместное шифрование и, как следствие, обилие ключей заставляет задуматься об их надежном хранении. Хранение ключей на внешних устройствах, откуда они не могут быть скопированы, уже давно считается хорошей практикой. Я расскажу о том, как за 3$ и 2 часа сделать такой девайс.
Читать дальше →
Всего голосов 151: ↑151 и ↓0 +151
Просмотры 59K
Комментарии 151

Создание полноценного Viberbot на Django 2 и Viber REST API. Часть первая — Webhook

Python *Программирование *Django *API *Аналитика мобильных приложений *
🔥 Технотекст 2020
Tutorial

Установка Webhook для работы bot на viber и отправка первого POST запроса к backend мессенджера


Опираясь на свой опыт разработки под Viber и множество неоднозначных мнений, публикую цикл статей по созданию и запуску viberbot. Для понимая полной картины в целом, будем работать с чистым REST API VIBER, без каких либо оберток.

Радио Вайбер показал себя слишком нестандартно, поэтому мы будем создавать классический диалоговый бот (коих много тысяч развелось в telegram).

Параллельно увидим все недостатки и преимущества botviber и поймем: чему в России легче быть — botviber VS bottelegram, главные отличия бот разработки этих платформ.

image

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

Статья больше расcчитана на новичков, кто не успел разобраться с REST API Viber.

В течение месяца по 1-2 tutorial в неделю кто захочет, тот научиться создавать боты на мессенджере Viber, c личной админ-панель, инструментами рассылки bulk-messages, без каких либо конструкторов и платформ. Также создадим minilanding-page (как у телеграм-ботов) для поиска и продвижения вашего бота.

Я рекомендую параллельно изучать Django, кто еще не начал, и особенностей его работы в develop и production режимах.

Не хватает бота — тогда начнем

Читать дальше →
Всего голосов 8: ↑8 и ↓0 +8
Просмотры 13K
Комментарии 0

Простой zero-copy рендеринг аппаратно ускоренного видео в QML

C++ *Qt *
Из песочницы

Введение


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


Мысль, что это вдруг может быть полезно, возникла после того, как я попытался запустить примеры работы с камерой в Qt, и на embedded платформе они работали со скоростью 3-5 кадра в секунду. Стало ясно, что из коробки ни о каком zero-copy речи не идет, хотя платформа все это отлично поддерживает. Справедливости ради, на десктопе VideoOutput и Camera работают, как и положено, быстро и без лишних копирований. Но в моей задаче, увы, нельзя было обойтись существующими классами для захвата видео, и хотелось завести видео из стороннего источника, каким может быть произвольный GStreamer пайплайн для декодирования видео, к примеру, из файла или RTSP стрим, или сторонний API который интегрировать в базовые классы Qt несколько сомнительно. Можно еще, конечно, в очередной раз переизобрести велосипед и написать свой компонент с рисованием через OpenGL, но это сразу показалось заведомо тупиковым и сложным путем.


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

Читать дальше →
Всего голосов 14: ↑14 и ↓0 +14
Просмотры 3K
Комментарии 6

Информация

В рейтинге
Не участвует
Откуда
Кызыл, Тува (Тувинская Респ.), Россия
Зарегистрирован
Активность