Search
Write a publication
Pull to refresh
4
0.8
Дмитрий Померанцев @pda0

User

Send message

Таймеры и многозадачность на Ардуино

Reading time10 min
Views47K
image

Сегодня мы поговорим о такой актуальной теме, как таймеры и организация многозадачности на Arduino. Поводом для написания этой статьи послужили лекции Олега Артамонова @olartamonov для студентов МИРЭА в рамках IoT Академии Samsung, а точнее, высказывание Олега, цитата (2-я лекция, 1:13:08):
«Есть, например, задачи на которых можно сломать большинство ардуинщиков, особенно начинающих, попросите их помигать пятью разными светодиодами с разной частотой и периодом и так, чтобы ещё период можно было индивидуально для каждого светодиода изменять...»

Судя по высказываниям Олега, у него весьма превратное представление об Arduino вообще и об «ардуинщиках» в частности. Мигание пятью светодиодами в означенных им режимах это абсолютно тривиальная задача для Arduino, а для Arduino Mega Server это вообще не задача, а сущее недоразумение — его штатными средствами организуется многозадачность, которая легко управляет сотнями различных сущностей (светодиодов, сервоприводов, шаговых моторов и т. д.) в реальном времени.

Давайте вместе разберёмся как организовать многозадачность на Arduino, а заодно поможем студентам МИРЭА избавится от навязанных им стереотипов восприятия по отношению к социо-культурному и технологическому феномену нашего времени под названием Arduino.
Читать дальше →

Как запретить Windows 10 перезагрузку после обновлений

Reading time2 min
Views94K
Всем привет. Удивительно, но ответ на этот вопрос (точнее, «как сделать всё так, чтобы было как раньше») слабо освещён в рунете. Да и в целом готовое решение ещё нужно поискать.
Однако проблема требует решения т.к. система восстанавливает после перезагрузки далеко не все приложения.

Итак:
Читать дальше →

«Кто мутит воду – 2»: или всё, что вы хотели знать об обратном осмосе

Reading time13 min
Views420K


Мой первый материал — сравнение бытовых фильтров для воды «Кто мутит воду» готовился в запале исследователя-переселенца. Когда впервые переезжаешь в свою собственную квартиру, начинаешь уделять внимание мелочам — потому что делаешь и покупаешь для себя, и надо, чтобы всё было «на века». В посте я поделился опытом сравнения фильтров-кувшинов и сорбционных проточных фильтров разных производителей. Планов будить воинствующих комментаторов изначально не было… А потом в дверь личку постучали и сказали: «Пиши ещё, гостем будешь!». И я написал.

Компьютерная игра: защита интеллектуальных прав разработчиков

Reading time5 min
Views29K
Видеоигра включает в себя много составляющих – это исходный код программы, графика, музыка, сценарий, персонажи и т.д. Все эти объекты могут охраняться интеллектуальными правами. Разберемся, какие права есть у разработчиков компьютерных игр и как их защитить.

Что можно защитить


В законодательстве Российской Федерации нет указания на компьютерную игру как на отдельный объект интеллектуальных прав. На практике компьютерные игры относят к программам для ЭВМ и/или к составным произведениям (которые включают в себя несколько объектов интеллектуальных прав). И в том, и в другом случае речь идет об авторских правах. Части игры могут быть запатентованы как промышленные образцы или зарегистрированы в качестве товарных знаков.

По порядку:

1. Авторские права

Авторскими правами могут быть защищены:

— Исходный и объектный код программы;
— Графические элементы;
— Тексты внутри игры (правила, указания героям, диалоги);
— Саундтреки;
— Видеозаставки;
— Шрифты;
— и другое (перечень не исчерпывающий).
Читать дальше →

Применение правил тригонометрии для создания качественной анимации

Reading time12 min
Views23K
Автор материала, перевод которого мы сегодня публикуем, Нэш Вэйл, говорит, что недавно он занимался исследованием лендинг-страниц. В ходе работы он наткнулся на один сайт. Это был отличный, полезный ресурс. Однако, в ходе работы с ним, Нэш заметил, нечто неприятное.

Неестественная анимация
Читать дальше →

Снижение сложности вычислений при операциях с векторами и матрицами

Reading time6 min
Views7.8K

Введение


Ввиду того, что при решении задач оптимизации, дифференциальных игр, и в 2D и 3D расчётах, а вернее при написании софта, который проводит вычисления для их решения одними из наиболее часто выполняемых операций являются векторно-матричные преобразования типа $aX+bY$, где $a,b$ — скалярные значения, $X, Y\in R^n$ — вектора или матрицы размерности $R^{n\times m}$.


Собственно вот такие:


image
(источник).


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


$Y_{n+1}=Y_n+\frac{h}{6}(k_1 + 2 k_2 + 2 k_3+k_4),$


где $Y_i$ — очередное значение интегрируемой функции $f(t,Y)$ $h$ — шаг метода, а $k_i$, $i=1..4$ — значения интегрируемой функции в некоторых промежуточных точках — в общем случае векторах.


Как можно заметить основную массу математических операций как для векторов, так и для матриц составляют:


  • сложение и вычитание — более быстрые;
  • умножение и деление — более медленные.

О сложности вычислений хорошо написано в соответствующем курсе МФТИ.


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


Соответственно есть смысл заняться снижением количества операций привносящих наибольшую сложность — умножения (математика) и операции управления памятью (алгоритмика).

Читать дальше →

Как безопасно программировать в bash

Reading time11 min
Views45K

Почему bash?


В bash есть массивы и безопасный режим. При правильном использовании bash почти соответствует практикам безопасного кодирования.

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

Предисловие


Данное руководство сопровождает ShellHarden, но автор также рекомендует ShellCheck, чтобы правила ShellHarden не расходились с ShellCheck.

Bash — не тот язык, где самый правильный способ решить проблему одновременно является самым простым. Если принимать экзамен по безопасному программированию в bash, то первое правило BashPitfalls звучало бы так: всегда используй кавычки.

Главное, что нужно знать о программировании в bash


Маниакально ставить кавычки! Незакавыченная переменная должна расцениваться как взведённая бомба: она взрывается при контакте с пробелом. Да, «взрывается» в смысле разделения строки на массив. В частности, расширения переменных вроде $var и подстановки команд вроде $(cmd) подвергаются расщеплению слов, когда внутренняя строка расширяется в массив из-за расщепления в специальной переменной $IFS с пробелом по умолчанию. Это обычно незаметно, потому что чаще всего результатом становится массив из 1 элемента, неотличимый от ожидаемой строки.
Читать дальше →

Мониторинг производительности дисковой подсистемы при помощи zabbix и block stat

Reading time5 min
Views42K
Вряд ли кто-то будет спорить, что наблюдение за производительностью дисковой подсистемы — чуть ли не важнейшая задача для всех высоконагруженных систем хранения и баз данных. Я изначально столкнулся с этим давным-давно, еще когда приходилось наблюдать за PostgreSQL. В последнее время вернулся к этому вопросу в связи с необходимостью тестирования различных хранилищ.

Сегодня хочу поделиться с сообществом своим текущим опытом на реальном примере zabbix и его связке с block stat.


Читать дальше →

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

Reading time6 min
Views18K

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


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

Что же делать начинающему, в лучшем случае, музыканту? Я маршировал в колледже, поэтому понимаю, что такое ритм, фразировка и темп, но мои возможности по созданию музыки остановились где-то на уровне средней школы.

К счастью, у нас, авторов фильмов и подкастов с проблемами с музыкой, теперь есть специальные роботы. За последнее время появилось несколько ИИ-проектов хорошего качества – одним из самых заметных, пожалуй, будет Flow Machines от Sony, дебютный альбом которого вышел в январе – и медленно, но верно эти инструменты перемещаются из исследовательских лабораторий и профессиональных студий в общий доступ.
Читать дальше →

Разбираемся с артиклями: продвинутый уровень

Reading time4 min
Views42K
Если вы уже освоили базовые правила и уверенно применяете их в речи и письме, то пришло время узнать некоторые тонкости, которые обычно рассматриваются на высоких уровнях. Мы приготовили для вас еще одну шпаргалку, которая поможет выучить оставшиеся правила расстановки артиклей раз и навсегда.

image
Читать дальше →

7 типичных ошибок в английском, которые мы делаем при общении с иностранцами

Reading time4 min
Views244K
image

Помните анекдот про Штирлица, в котором ничего не выдавало советского разведчика, даже волочащийся парашют и буденовка? Примерно такая же история регулярно происходит с нашими соотечественниками при общении с носителями английского языка. Американец Дэниел на канале онлайн-школы Skyeng рассказал, какие фразы и ошибки выдают в нас иностранцев, а также как этого избежать.
Читать дальше →

Имитация естественного движения: Steering Behaviors — 2

Reading time24 min
Views12K
Первая часть статьи здесь.


Часть 6. Избегание коллизий


Для правильной навигации NPC часто требуется способность избегать препятствий. В этой части мы рассмотрим steering behavior collision avoidance (избегание коллизий), позволяющее персонажам благополучно уворачиваться от препятствий в окружении.



Введение


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

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


Анализируются препятствия перед персонажем и выбирается ближайшее (наиболее угрожающее).

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

Подборка: 6 открытых фреймворков для создания бэктестеров торговых стратегий на Python

Reading time6 min
Views25K


В своей статье на ресурсе QuantStart, эксперт по разработке финансовых приложений Фрэнк Смитана (Frank Smietana) рассказал о существующих фреймворках для создания софта для бэктестинга торговых стратегий и дал несколько советов по выбору подобных инструментов. Мы адаптировали этот полезный материал.
Читать дальше →

Найдется все: поисковые метки позволяют забыть об утере вещей

Reading time4 min
Views19K


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

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

Прогулка между пикселями

Reading time8 min
Views17K
Этот пост относится к моей статье о вычислении точек на кривых Безье с помощью линейной интерполяции текстур. Расширенный метод распространяется на поверхности Безье и (многомерные) многочлены.

Первоначальное наблюдение состояло в том, что если произвести выборку по диагонали текстуры 2×2, то в качестве выходных данных получатся точки на квадратичной кривой Безье, а опорные точки кривой являются значениями пикселей, как на изображении ниже. Когда я говорю, что вы получаете квадратичную кривую Безье, то выражаюсь буквально и точно. Происходящее можно представить так: интерполяция текстуры буквально выполняет алгоритм де Кастельжо. (Примечание: если в примере ниже значения “B” не равны, то вторая опорная точка будет средним из этих двух значений: расширение злоупотребляет этим, чтобы аппроксимировать больше кривых в меньшее количество пикселей).


Читать дальше →

Внутренности протокола, которым браузеры передают голос и видео

Reading time6 min
Views27K
image

WebRTC, технология голосовых и видеозвонков в браузерах (а еще realtime передачи произвольных данных, peer-to-peer пробивания NAT и захвата экрана) никогда не была простой. Долгая история, несовместимости между браузерами, запутанная документация, множество решаемых задач и используемых протоколов. Возможность позвонить и принять звонок из браузера всегда была одной из ключевых «фишек» нашей платформы Voximplant, и так как мы в этом неплохо разбираемся, то стараемся следить за интересными статьями и адаптировать их для аудитории Хабра. Под катом перевод свежей статьи от ребят из callstats.io — сервиса сбора статистики по качеству звонков для браузера. В небольшой статье они рассказывают о протоколе RTP с помощью которого, собственно, браузер и передает пакеты с голосом или видео.
Читать дальше →

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

Reading time21 min
Views24K
image

Недавно я выпустил свою первую игру BYTEPATH и мне показалось, что будет полезно записать свои мысли о том, чему я научился в процессе её создания. Я разделю эти уроки на «мягкие» и «жёсткие»: под мягкими я подразумеваю идеи, связанные с разработкой ПО, жёсткие — это более технические аспекты программирования. Кроме того, я расскажу о том, почему хочу написать собственный движок.

Мягкие уроки


Сообщу ради контекста, что начал делать собственные игры примерно 5-6 лет назад и у меня есть 3 «серьёзных» проекта, над которыми я работал до выпуска первой игры. Два из эти проектов мертвы и полностью провалились, а последний я временно приостановил, чтобы поработать над BYTEPATH.

Вот gif-анимации из этих проектов



Первые два проекта провалились по разным причинам, но с точки зрения программирования они провалились (по крайней мере, как мне это видится) потому, что я слишком часто пытался быть слишком умным и заранее обобщал слишком многое. Большинство мягких уроков связано с этим провалом, поэтому важно было сказать об этом.
Читать дальше →

Про утечку памяти в одном серверном приложении

Reading time14 min
Views18K


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

Разработка нагрузочных скриптов для браузерных/мобильных игр. Часть 1

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

Есть большая разница между тестированием разных банковских/retail-процессов и игр. В первом случае пользователи выполняют их задачи почти изолированно друг от друга и используют только те данные и элементы, которые видят в окне своих браузеров или других клиентов в данный момент, что облегчает разработку нагрузочных скриптов. В играх же пользователи (игроки) находятся в динамично меняющемся мире и часто подвержены влиянию друг друга. В моем воображении разница выглядит примерно так:


Читать дальше →

Как оптимизировать энергопотребление в iOS

Reading time8 min
Views7.2K

image


Пользователи устройств под управлением iOS часто жалуются, что аккумулятор быстро разряжается. Когда это происходит? Чаще всего при использовании GPS, но есть и другие причины ускоренного разряда батареи. Например, насыщенный обмен через разные виды приемопередатчиков (сотовая связь, bluetooth) или интенсивная отрисовка графики. Некоторые любители яблочных девайсов грешат на батарею, но часто в быстрой разрядке виноваты разработчики приложений. Пользователям важно, чтобы заряда хватало надолго, поэтому при разработке стоит избегать решений, которые повышают энергопотребление. Но зачем разработчикам вообще думать о том, как долго телефон держит заряд? Чем дольше iPhone включен, тем больше шанс, что пользователь откроет приложение и будет им пользоваться.


Я рассмотрю основные энергопотребители и подходы, которые помогают уменьшить энергопотребление девайса.

Читать дальше →

Information

Rating
2,745-th
Location
Химки, Москва и Московская обл., Россия
Date of birth
Registered
Activity