Pull to refresh
24
0.1
Лев Рычковский @devlev

web-программист

Send message

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

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

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

Сами сигналы с датчиком можно легко записать в логи и потом покрытть тестами и эти данные. Тогда сразу будет видно - вообще живой ли датчик. Адекватные ли данные он присылает.

Калибровка - тоже не маловажная часть любого подобного проекта. Если нужно то можно делать ее каждый раз перед запуском. Что-то можно откалибровать уже находу.

Короткая 3х секундная программа калибровки уже ввоздухе смоглабы много узнать о реальных показателях коптера. 3 секунды для микрокомпьютера просто бездна времени для сбора данных и их анализа.

Ну и конечно основа основ - юнит тесты! Без них очень сложно сделать поистени сложные вещи. Ардуина или будь то STM32 просто принимает данные с датчиков и передает их в бизнеслогику. Бизнес логика обрабатывает данные и выдает уровни газа для моторов. Безнес логика пакуется в отедельную библиотеку и покрывается юнит тестами. В таких тестах мы можем легко эмулировать перемещение во времени и показания самих датчиков. В идиальных условиях Бизнес логика должны на любые эти изменения уметь реагировать и делать то что нужно.

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

Это я к чему? Что кандидат может элементарно забыть что то. Но помнить где это искать в случае необходимости.

Ну а то что проинтервьюировали столько кандидатов и не нашли нужного ну тут явно что-то не так. С теми, кто интервьюировал. Или с теми кто искал кандидатов, раз набрали одних тимлидов да директоров вместо сеньоров.

Зачем отправлять запросы при Polling методе каждые 2 секунды, если сам по себе Polling метод подразумевает, что сервер как бы ждет некоторое время и держит соединение не отдавая его содержимое, пока данные не появятся?

Это тогда не Polling получается а какой Getting.

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

Вместо connect из react-redux можно использовать хуки useDispatch и useSeletector и результат будет тот же самый.

Ну по ссылки как бы все понятно, что автор комментария создал приватный email да еще и не читал видимо его некоторое время, но все ждал, когда ему что-то там пришлют. Потом когда он это прочитал, уже наступил 2023 год и типо отправка прекращена. Но значит должен был быть сделан возврат, раз отправка прекращена. Был ли сделан возврат? По ссылке этого не написано. Если возврата не было сделано и товар не был отправлен, то автор комментария правильно пишет: "мы в одностороннем порядке прикарманили ваши деньги".

Надо вспомнить, что когда только эти самые веб-компоненты появились, ими можно было пользоваться разве что для каких то демок поиграться. Были разные реализации в разных браузерах. Это все вставляло палки в колеса разработки. А потом появился React. И только потом настала смерть IE, а вместе с этим наступила эра когда веб-компоненты начали поддерживаться всеми браузерами. Но сейчас уже 2023 год, и вот я задаюсь вопросом, а что могут сделать веб-компоненты, что не может React? Shadow DOM у них есть, а если он мне не нужен?

Мне кажется, что React как раз и послужил этаким "убийцей" веб-компонентов. Из мира React мне не разу не пригодилась эта технология. А любой велосипед можно сделать и на React, получится React-компонент.

А вот не в мире React, когда я тут что-то сделал, но я не хочу чтобы другие стили на сайте у меня тут все не поломали, дай-ка я засуну все это в веб-компонент - Shadow DOMом едины. Такой подход имеет место быть. Но здесь же очевидны и другие проблемы, более высокого уровня, архитектурные.

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

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

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

Но без правильного питания организму просто не из чего будет восстанавливать мышцы, а так же наращивать новые. Представьте себе стройку, прораб говорит: "Стройте дом", а кирпича то нет. Из чего строить? Поэтому 2.5 грамма белка на массу тела в день надо в себя запихнуть.

Сколько вы там сказали весите, 83? Это почти 800 грамм говядины каждый день! Конечно есть одну говядину необязательно, есть и другие продукты с высоким содержанием белка)))

А если завтра курс бакса станет 200р - неужели не понятно что работать из-за границы на Россию станет невыгодно? Неужели не понятно, что платить зарплату сотрудникам за границей компании не выгодно без привязки к рублю с текущим "широко" плавающим курсом?

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

А ходить и жаловаться и считать чужие доходы такой себе удел...

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

Я думаю ваша версия устройства, выйдет столько же по цене или даже дороже, даже если оно будет без экрана. Потому что 80-90% расходов будет составлять ПО. Приложение же будет бесплатное, а в нем нужно огого сколько интерфейсов наделать да все это протестировать, да все это с другим девайсом через блютуз и асинхронно. Да в добавок приложения нужно два. А потом когда выкатится новая версия прошивки на устройство, нужно будет еще и старые поддерживать и новые. Поэтому этот путь интересен в плане удобство ношения, но за все надо платить. Дерзайте и что-то обязательно получится.

Слушайте, ну вы такие классные советы раздаете и возможно мой вопрос будет уже какой-нибудь 101, но все таки хочется узнать: что надо сделать, чтобы развалить сеть ночных клубов?

Хочется сказать: просто жесть...

Интересно, долго еще 1С будет считать что их генерируемые запросы идеальны и не позволять их переписывать "на лету", заставляя прибегать к каким то кастылям, в виде промежуточных решение, вместо того чтобы позволить в самой платформе сделать подмену, например, как это сделано в Entity Framework?

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

Я думаю что предыдущий комментарий был отсылкой к тому, что в HTML часто для разметки стилей используют просто классы, а не атрибуты, как у вас. Исторически было так что стили на атрибутах работают медленее чем на классах, но как сейчас обстоят дела с производительностью стилей на атрибутах я не знаю. К теме странного поведения overflow-y: auto это не имеет никакого отношения.

Grid как раз и был создан для того чтобы решать подобные проблемы и отлично решает их. Flex - это как бы 1D (либо по горизонтали/либо по вертикали), а Grid - это как бы 2D (и по горизонтали и по вертикали).

Да и не только для них. Вангую будут еще разборы стервятников по падали.

Поделитесь, что надо делать чтобы в 26 заработать такой букет болезней со спиной как у вас?

Я пытался сделать программу для перемещения коллекторного двигателя с энкодером на заданное число оборотов (расстояние), чтобы оказаться в нужном месте. На рисунке ниже показано усредненный график (5 трем замерам) в шагах энкодера и 5 фаз двигателя по 1 секунде: стоп, вперед, стоп, назад, стоп. При этом для торможении я использовал реверс двигателя.

А вот рисунок как раз с выводом ускорений (разность предыдущего значение со следующим).

Собственно момент резкой смены ускорения это обсалютно нормально, а вот не линейность ускорений не очевидна.

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

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

Я так понимаю setInterval здесь используется только чтобы менять непосредственно сами отображаемые буквы. А то как они будут перерисованы определяют правила на css. requestAnimationFrame вызывается на каждый кадр отрисовки - соответственно буквы будут так быстро меняться что мы просто не увидем анимацию их смены.

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

Ну и пара признать что не стоит рендерить 50к строк и надеяться что все будет работать быстро. Виртуальный скролл решает данную проблему.

1
23 ...

Information

Rating
3,051-st
Location
Тула, Тульская обл., Россия
Registered
Activity