Pull to refresh
0
Send message
Патрон — всего лишь пример смекалки. Один из многих возможных, но достаточно наглядный, пусть и немного опасный.

У вас изначально неверный подход к решению таких задач. В интернете полно картинок «Эту страну не победить» со всякими «изобретениями» типа поставить вместо сломанного гусака крана вырезанный из полторашки лоточек и т.п. Как поступит американец если у него сломается патрон лампочки? Пойдет и купит новый. И не потому что он тупой. Просто он обучен хорошо работать на своей работе. Он зарабатывает достаточно, чтобы купить сразу 10 патронов про запас. Он заменит патрон и дальше будет заниматься своими делами.
А русский, вместо этого пол-дня будет изобретать этот патрон из саморезов, потом периодически он будет отваливаться. Потом его еще и током шандарахнет.
Подводя итог: не нужно экономить, проявлять смекалку. Сначала попытайтесь использовать готовые решения из магазина.

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

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

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

Вот только учить «не берите микрозаймы» так же недальновидно

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

Сейчас будут минусовать, но не могу не сказать:
1. Такой патрон, тем более в ванной комнате — это не проявление смекалки, это проявление глупости. Он стоит в магазине 20 рублей, а вы обрекаете себя или близких на пожар или удар током.

2. "81x2+126xy+49y2 нужно преобразовать как (9x+7y)2". Да, раньше, когда все считал человек своими глазами это было хоть как-то полезно. Сейчас это не больше чем бесполезная головоломка, которой забивают голову детям. В современном мире компьютеру все равно как ты напишешь. Вместо этого лучше бы давали больше прикладных навыков. Вот английский сейчас нужен как никогда. А хорошо ли его знают дети? Может выделить эти часы перекладывания X и Y между скобочками на изучение английского?
А основы финансовой грамотности объясняют детям? Почему у нас популярны микрозаймы, когда люди идут и занимают даже 1000 руб под 1% в день? Кого вы выпускаете из школы, если у него даже жалкой тысячи нету в заначке всегда и при любых обстоятельствах? Зато большой специалист по перекладыванию X и Y…
Если вы фрилансер, просто делайте работу хорошо, и к вам опять обратятся старые клиенты с новыми заказами. А если хитрить, оставлять закладки и т.п. — в лучшем случае вашу работу просто выкинут, и больше с вами не будут иметь дела.
А в худшем — поставят плохой отзыв или подадут в суд, и с фрилансом вы можете распрощаться навсегда.
STM32 умеет такое делать, в случае отвала внешнего кварца переходит на внутренний RC генератор.
Я в не очень крупных проектах использую кооперативную многозадачность.
Каждый объект имеет функцию processEvents() в которой он проверяет, нужно ли ему что-то сделать, выполняет это, или сразу делает возврат из функции.
В main() у меня бесконечный цикл, в котором для каждого объекта вызывается processEvents():
for(;;) {
    uart.processEvents();
    spi.processEvents();
    webServer.processEvents();
    ...
    sleep();
}

В конце цикла сон. Возврат из сна по любому прерыванию, включая systick.

Преимущества такого подхода:
1. Все предельно просто. Не нужно никаких RTOS, есть только одна функция, которая периодически вызывается.
2. Не нужны мьютексы для синхронизации между задачами. Однако, не забываем про прерывания!
3. Не нужно выделять память на каждую задачу отдельно. Достаточно такого количества памяти, что потребляет самая ресурсоемкая задача.

Недостатки:
1. Не так круто, когда у тебя под капотом банальный бесконечный цикл, а не RTOS.
2. Время исполнения задачи не должно быть слишком большим. Это не значит что нельзя делать какой-то очень длительный расчет, просто придется его бить на части и запоминать промежуточные результаты.
3. Возможно, не так энергоэффективно, как RTOS. Хотя если работы у задач нету, они все быстро исполнятся и CPU уйдет в сон.

С RTOS мне лично не понравился именно момент с назначением количества памяти каждой задаче. Мало дашь — получишь очень трудноуловимый баг с порчей соседних задач. Много дашь — памяти не хватит, задач то много.
А потом найдется баг в той реагизации, которую вы скопировали. Будете руками ходить и подправлять везде?

Ну смотрите, вы сделали одно устройство, скажем, CAN-RS485. В нем вы применили универсальный драйвер UART, который оформили в виде внешней библиотеки, которая лежит в отдельном git репозитории. Все работает, устройство продается.

Потом вы сделали новое устройство — метеостанцию. Подключили тот же драйвер, нашли в нем баг и исправили, плюс написали еще функциональности, которая нужна именно под метеостанцию. Вы уверены, что старые устройства при этом не сломаются? Напоминаю, они работали со старым кодом нормально. Будете каждый раз проводить тестирование всех ваших устройств, когда меняете универсальные драйвера? Срочно пойдете менять всем прошивки? А сроки и так горят…
Вангую, что пора уже ехать. Пока можно.
Гайки только закручивают, того и гляди Россию санкциями обложат, как Иран. Фриланс умрет, иностранные компании уйдут, выезд за границу только с разрешения товарища майора.
Понятно, это и есть ООП головного мозга, когда пытаются делать «конструкторы». Вполне вероятно, это идея какого-нибудь менеджера — ускорить разработку будущих устройств, сделав универсальные блоки. Потом на это наложилось мировосприятие программиста, недавно прочитавшего про ООП умную книжку. Налепили абстракций и теперь чтобы дернуть пин и включить светодиод, им нужно не вызвать 1 функцию из HAL с записанными прямо в параметрах номерами пинов. Им нужно создать кучу структур описателей пинов, их положить в массив, массив положит в класс BSP, этот класс передать в драйвер устройства, и наконец объект «Светодиод» вызовет у драйвера функцию включения светодиода.

Если хочешь переиспользовать код, то проще скопировать его и переписать под задачу, чем городить дерево абстракций. Проще будет потом, когда будет отлаживать все это. Проще будет другому программисту вникнуть в незнакомый проект, если в нем количество сущностей небольшое.
В моем примере у объекта Rs485Port как раз одна область ответственности — передать на линию 485 и принять из нее блок данных.
Он отслеживаеть все эти тайминги конца пакета, дергает пин DE и пишет/читает в UART.
Не нужно создавать дополнительные объекты «Дергатель пина DE». Или «Читатель абстрактного потока», от которого потом наследуем класс «Читатель потока UART».
Попробуйте нарисовать блок схему вашего устройства на бумажке. В ней должно быть 5-10 основных классов, не больше. Не нужно создавать дополнительный абстрактные классы просто из-за того что у нас ООП. Если у вас в системе чтение из UART нужно только в одном месте и оно реализуется простым вызовом функции HAL_ReadUart(void* data), то не нужны тут «Читатель потока UART» и «Абстрактный читатель».

Вообще, по опыту, правильная архитектура складывается не сразу. Сначала нужно написать чтобы просто работало. Потом, через некоторое время смотрим на код и понимаем, что стоит его отрефакторить, создать новые классы или наоборот избавиться от лишних. После того как сделаешь 10 проектов, уже не захочеться создавать все эти «Абстрактные читатели» там где они не нужны на 100%.

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

В моем проекте Ethernet-RS485 всего 18 классов. При этом он умеет ModbusTCP, UDP, есть внутри Web сервер, через который можно менять настройки.
С++ использовать, безусловно, стоит, хотя бы ради улучшенного синтаксиса (namespace, auto, template).
Но нужно предохраняться, чтобы не подхватить ООП головного мозга, когда «конвертер CAN<->RS485 по протоколу заказчика содержит под 60 объектов». Возможно, вы слишком сильно разбиваете задачу на объекты. Зачем на каждый пин по объекту? Делайте объекты крупнее.
Например, для RS485 это будет 1 класс Rs485Port, который делает запросы через HAL к UART и GPIO, подписывается на события от отдельного класса таймера, и предоставляет API в виде «отправить пакет» и «пакет принят». И это никакой не God object, круг его обязанностей строго ограничен, он легко тестируется и отлаживается. Не нужно ему ни наследований, ни шаблонов.
Ну то есть все-таки выгодно дружить со спонсорами из Лос-Анджелеса, выгодно имет демократический стиль управления? Имея изначально более плохие условия, «селом», как вы говорите, они стали технологическим лидером в регионе да и в мире.
У нацистов были конкретные планы устроить геноцид неугодных народов, включая русских.
У США же другие рычаги давления — экономические.
Возьмите 2 Кореи. Одна после второй мировой под СССР и Китаем, другая под США. В той, что севернее — голод, тоталитаризм, нарушение всех мыслемых прав человека. В южной — LG, Samsung, Hyndai. Кому больше повезло?
В чем суть вопроса?
Фриланс это обычно и есть работа из дома, из гаража или еще откуда нибудь, где вам заблагорассудится сесть с ноутбуком.

Фриланс (как возможность/необходимость самому себе быть боссом, менеджером и литагентом в одном флаконе) на самом деле далеко не всех устраивает — многие хотят просто делать то, что делают, не отвлекаясь на бюрократию и беготню за клиентами.

Время на поиск клиентов очень зависит от Job Success Score и отзывов. Если он больше 90% или вы Top Rated, тогда от клиентов отбоя нет, каждый день валится несколько предложений о работе. Если же он просел, как у меня было, до 70%, то сложно взять даже самому заказ. Так что следите за репутацией, делайте работу качественно и вовремя и все будет хорошо.
Немного разные назначения. TODO — это пометка на будущее, он может висеть в коде годами, и никто это так и не исправит.
А //#### — это временный грязный хак, который даже в коммит не попадет, скорее всего. То есть перед коммитом мы ищем все #### и исправляем их. Эдакий чек лист, чтобы не закоммитить «грязный» код.
Какая бы ни была зарплата, всегда можно отложить часть денег, сократив свои траты. Не купить пива и сигарет. Вместо свинины в супермаркете купить курицу или вообще карасиков у рыбаков.
Многие очень наплевательски относятся к абонентским платам. Например, переходят на тариф сотовой связи с включенными минутами и абонентской платой. Хотя реально проговаривают гораздо меньше минут. Все это вроде бы мелочи, но если собрать все вместе, да посчитать за год, то наберется приличная сумма.
Самое главное правило финансовой грамотности — нужно жить по средствам. Если у тебя зарплата 15 тысяч и совсем нет накоплений, не нужно покупать в магазине огромный телевизор в кредит за 20т.р.
Люди не понимают, что нужно затянуть пояса, потерпеть год, накопить подушку, и потом можно будет брать бесплатные кредиты у себя самого!

Теперь вернемся к главной теме разговора, а именно к фрилансерам-программистам, которые зарабатывают от 20$ в час. Если они еще и живут в регионах, где стоимость жизни меньше (в основном это арендная плата), то у них такие сверхдоходы, что подушка на месяцы накапливается за неделю-две.
Если бы наши деды тогда не успели — нас вполне могла постигнуть участь всех тех стран, куда США привнесли демократию, и у которых не было ядерного оружия.

Разрушенная послевоенная Германия — стала страной с крупнейшей экономикой в Евросоюзе.
Разрушенная послевоенная Япония, пережившая 2 атомных бомбардировки — наиболее технологически развитая азиатская страна в 80-90х.
Из-за недооценивания опасности от радиоактивных материалов в то время.
Из-за пренебрежения к здоровью простых граждан и чистоте природных ресурсов.

Вот вспомните, например, как раньше курили. В 80-е было нормальным сидеть на совещании в организации в кабинете и дыметь как паровоз. Сейчас это нонсенс. Люди по-другому стали относиться к своему здоровью, стали меньше курить. Да, какой-нибудь хипстер может достать свой вейп в присутствии других людей, но на него все будут смотреть как на дебила.
Я думаю, это далеко не совпадение, что завод по переработки радиоктивных руд сделали на берегу реки. Удобно сливать.
Есть такая штука Яндекс.Толока. Там тоже нужно слушать и анализировать голосовые записи с Навигатора и, возможно, с с их колонки. Причем, не нужно быть сотрудником Яндекса, регистрируйся в Толоке, бери задание и слушай.

Information

Rating
Does not participate
Registered
Activity